1

この質問は何よりも好奇心です...

次のようなクラスがあるとします。

public class Foo{
public int? x {get; set;}
public int? y {get; set;}
}

そして、プロジェクトのどこかにインスタンスが作成されました:

var foo1= new Foo
         {
           x= 1;
           y= 1;
         };

var foo2= new Foo
         {
           x= 1;
           y= 1;
         };

何らかの理由で、互いに等しいかどうかを確認し、等しいかどうかを設定しNULLて画面に出力したい場合...

元:

if(foo1.x == foo2.x)
   foo1.x = null;
if(foo1.y == foo2.y)
   foo1.y = null;

if(foo1 == null){
   Console.WriteLine("foo1 is NULL");
}else{
   Console.WriteLine("foo1 is not NULL");
}

どちらが印刷されますか?

foo1 のインスタンスは存在しますが、そのオブジェクトはすべて に設定されていNULLます。私はnull許容型の概念に慣れていないので、これは私の好奇心を刺激しました! (私のVisual Studioはフリッツにあるか、自分でテストします)

4

4 に答える 4

5

私は両手を持っています。両手が空っぽなら私は存在しないの?

変数の null 状態は、変数が指すインスタンスのどのプロパティにも依存しません。

于 2013-07-29T13:50:30.347 に答える
2

あなたが言ったように、メンバーデータの値に関係なく、foo 自体はまだインスタンス化されたオブジェクトであるため、else ステートメントは出力されます。

于 2013-07-29T13:50:35.797 に答える
0

foo1はまだインスタンス化されたオブジェクトであるため、null ではないため、Console.WriteLine("foo1 is not NULL");実行されます。

x と y が null の場合に true を返す必要がある場合は、演算子とメソッドfoo1 == nullをオーバーライドできます。==Equals()

于 2013-07-29T13:55:55.020 に答える