Мне просто интересно, в чем разница между использованием функции, которая принимает параметр типа Type
(и еще какой-то параметр) и общую функцию, которая просто хочет тип в angle bracket
?Разница между общей функцией и функцией с параметром типа
Идея: Я хочу написать функцию, которая сохраняет тип в файловой системе ma в виде XML-файла. Поскольку XmlSerializer должен иметь тип объекта для сериализации, я хочу знать: что лучше?
private bool SerializeIt(object o, Type t, string filePath)
{
bool result = false;
try
{
if (File.Exists(filePath))
File.Delete(filePath);
XmlSerializer serializer = new XmlSerializer(t);
using (FileStream fs = new FileStream(filePath, FileMode.CreateNew, FileAccess.Write))
{
serializer.Serialize(fs, o);
}
result = true;
}
catch (Exception ex)
{
result = false;
Debug.WriteLine(ex);
}
return result;
}
private bool SerializeIt<T>(T o, string filePath)
{
bool result = false;
try
{
if (File.Exists(filePath))
File.Delete(filePath);
XmlSerializer serializer = new XmlSerializer(o.GetType());
using (FileStream fs = new FileStream(filePath, FileMode.CreateNew, FileAccess.Write))
{
serializer.Serialize(fs, o);
}
}
catch (Exception ex)
{
result = false;
Debug.WriteLine(ex);
}
return result;
}
Вы должны изменить свой параметр 'o' как' T' вместо 'object', тогда он может начать иметь смысл. –
@MikeEason: done – Radinator
В этом случае генерики ничего не добавляют к самому методу, так как вы не полагаетесь на его тип во время компиляции. Поэтому я не вижу необходимости в генериках или параметре типа, вы можете просто использовать 'o.GetType()' в обоих случаях, если вам не нужно обрабатывать нули. Если nulls - это проблемы, то ваша общая версия имеет ошибку. –