2

重複の可能性:
C#は値型をnullと比較しても問題ありません

構造体であるTimeSpanを使用した次のコードについて考えてみます。

// will not compile - illegal
TimeSpan ts = null;  

ただし、式は常にfalseですが、次のコードはコンパイルされ、有効です。

if (ts == null)
    Console.WriteLine("this line will never be hit");

構造体をNULLに設定することが無効である理由を誰かに教えてもらえますが、構造体を1つと比較しても問題ありませんか?

4

2 に答える 2

7

==の演算子をオーバーロードできるため、それでも合法ですstruct

struct AmNull {
    public static bool operator ==(AmNull a, object b) {
        return b == null;
    }

    public static bool operator !=(AmNull a, object b) {
        return b != null;
    }
}

...

Console.WriteLine(new AmNull() == null); // True
于 2012-04-09T23:43:31.637 に答える
3

私のためにコンパイルできません:

struct Foo { }

class Program
{       
    static void Main( string[] args )
    {
        var f = new Foo();
        if( f == null ) { }
    }
}

エラー1演算子「==」はタイプ「ConsoleApplication3.Foo」および「null」のオペランドには適用できません

于 2012-04-09T23:42:22.700 に答える