重複の可能性:
ジェネリック型をデフォルト値と比較するにはどうすればよいですか?
渡されたオブジェクトが空かどうかをテストする必要がある汎用関数があります。しかし、それはジェネリック型であるため、コンパイラーはクラスまたは構造体が渡されたかどうかを知りません。このため、null をテストすることはできません。型が空かどうかをテストする必要があります。
public virtual void SetFocusedObject(T obj)
{
//since we dont know if T is a class or a struct test against default
T defaultT = default(T);
if(obj != defaultT)
{
//code
}
}
これは機能しません。これは、コンパイラがテストをコンパイルできる T を認識していないためです。
代わりに、次のことも試しました
public virtual void SetFocusedObject(T obj)
{
//since we dont know if T is a class or a struct test against empty type
T defaultT = T.GetConstructor(T.EmptyTypes).Invoke(null);
if(obj != defaultT)
{
//code
}
}
そして、まったく同じ理由で、これも機能しません。誰かがうまくいく方法を提案してくれることを望んでいました。