私のアプローチはすることです
(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 をチェックする一貫した/エラーが発生しにくいスタイルを 1 つ持っていることを意味します。(object)item == null
また、 がよりも非常にわずかに高速であるObject.ReferenceEquals(item, null)
こともわかりましたが、それが重要な場合のみです (現在、すべてをマイクロ最適化する作業を行っています!)。
等価チェックの実装に関する完全なガイドを参照するには、参照型の 2 つのインスタンスを比較するための "ベスト プラクティス" とは? を参照してください。