Type
型のパラメータ(およびいくつかのパラメータ)と、型を欲しい汎用関数を使用する関数の違いはangle bracket
ですか?汎用関数と型パラメータを持つ関数の相違
考え方: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'パラメータを' object'の代わりに 'T'に変更すると意味があります。 –
@MikeEason:done – Radinator
この場合、コンパイル時にその型に頼っていないので、ジェネリックはメソッド自体に何も追加しません。だから私はジェネリックスや型パラメータの必要性を見ていないので、あなたはnullを処理する必要がない限り、どちらの場合でも 'o.GetType()'を使うことができます。 nullが問題の場合、汎用バージョンにはエラーがあります。 –