私のアプローチは
(object)item == null
私はそれに失敗object
することのない独自の等価演算子に依存しています。またはカスタム拡張メソッド(およびオーバーロード):
public static bool IsNull<T>(this T obj) where T : class
{
return (object)obj == null;
}
public static bool IsNull<T>(this T? obj) where T : struct
{
return !obj.HasValue;
}
または、より多くのケースを処理するには、次のようになります。
public static bool IsNull<T>(this T obj) where T : class
{
return (object)obj == null || obj == DBNull.Value;
}
制約によりIsNull
、値の型が妨げられます。今、呼び出すのと同じくらい甘い
object obj = new object();
Guid? guid = null;
bool b = obj.IsNull(); // false
b = guid.IsNull(); // true
2.IsNull(); // error
つまり、一貫して、エラーが発生しにくいスタイルで、nullをチェックします。私はまた、(object)item == null
が非常に非常にわずかに速いObject.ReferenceEquals(item, null)
ことを発見しました。
等価性チェックの実装に関する完全なガイドについては、参照タイプの2つのインスタンスを比較するための「ベストプラクティス」とは何ですか?を参照してください。
Assert.IsFalse(foo2 == foo1);