C# で (this == null) を実行する! 質問する

C# で (this == null) を実行する! 質問する

C# 4 で修正されたバグにより、次のプログラムは を出力しますtrue。(LINQPad で試してください)

void Main() { new Derived(); }

class Base {
    public Base(Func<string> valueMaker) { Console.WriteLine(valueMaker()); }
}
class Derived : Base {
    string CheckNull() { return "Am I null? " + (this == null); }
    public Derived() : base(() => CheckNull()) { }
}

VS2008 のリリース モードでは、InvalidProgramException がスローされます。(デバッグ モードでは正常に動作します)

VS2010 Beta 2ではコンパイルできません(Beta 1は試していません)。私は苦労してそれを知りました。

this == null純粋な C# で作成する他の方法はありますか?

ベストアンサー1

この観察はStackOverflowに投稿されました。別の質問今日は先ほど。

マークその質問に対する素晴らしい答え仕様 (セクション 7.5.7) によれば、そのコンテキストではアクセスできないはずでありthis、C# 3.0 コンパイラでこれを行う機能はバグであることを示しています。C# 4.0 コンパイラは仕様に従って正しく動作しています (ベータ 1 でも、これはコンパイル時エラーです)。

§ 7.5.7 このアクセス

このアクセス予約語 で構成されますthis

このアクセス:

this

このアクセスのみ許可されていますブロックインスタンス コンストラクター、インスタンス メソッド、またはインスタンス アクセサー。

おすすめ記事