==
演算子とをオーバーロードする場合を含め、C# で null を確実にチェックするにはどうすればよい!=
ですか?
class MyClass
{
public static bool operator ==(MyClass a, MyClass b) { return false; }
public static bool operator !=(MyClass a, MyClass b) { return true; }
}
class Program {
static void Main(string[] args) {
MyClass x = new MyClass();
MyClass y = null;
if (x != null) { System.Console.WriteLine(x.ToString()); }
// Next line throws a NullReferenceException
if (y != null) { System.Console.WriteLine(y.ToString()); }
}
}
次のオプションが利用可能であることを知っています。
x != null
演算子をオーバーロードする場合は信頼できません。null != x
演算子をオーバーロードする場合は信頼できません。(x ?? null) != null
型はまだ でMyClass
あるため、演算子をオーバーロードする場合は信頼できません。object.ReferenceEquals(x, null)
大丈夫なはず。x.Equals(null)
動作しません (もちろん、 でメソッドを呼び出しているためx
、これは である可能性がありますnull
)object o = x; o != null
を使用する必要object
がoperator !=
あるため、機能するはずです。- 他の何か?
では、信頼性、速度、読みやすさの点でどの方法が最適で、最も慣用的な方法はどれでしょうか? マイクロソフトは、ドキュメント/コーディング標準などで何らかの方法を推奨していますか?