==演算子とをオーバーロードする場合を含め、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 !=あるため、機能するはずです。- 他の何か?
では、信頼性、速度、読みやすさの点でどの方法が最適で、最も慣用的な方法はどれでしょうか? マイクロソフトは、ドキュメント/コーディング標準などで何らかの方法を推奨していますか?