私のアプローチはすることです
(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 つのインスタンスを比較するための "ベスト プラクティス" とは? を参照してください。