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. 我对可空类型的概念不熟悉,所以这引起了我的好奇心!(我的 Visual Studio 处于崩溃状态,或者我会自己测试)

4

4 回答 4

5

我有两只手。如果我的两只手都是空的,那是否意味着我不存在?

变量的空状态不依赖于它指向的实例的任何属性。

于 2013-07-29T13:50:30.347 回答
2

正如您所说, foo 本身仍然是一个实例化对象,无论其成员数据的值如何,因此 else 语句将打印。

于 2013-07-29T13:50:35.797 回答
0

您将拥有 else exucuted foo1 is not NULL,对象本身不为空,但属性为空。

你可以设置foo1为空foo1 = null

于 2013-07-29T13:51:33.713 回答
0

foo1仍然是一个实例化的对象,因此不会为空,因此Console.WriteLine("foo1 is not NULL");将被执行。

如果您真的需要foo1 == null在 x 和 y 为 null 时返回 true,那么您可以覆盖==运算符和Equals()方法。

于 2013-07-29T13:55:55.020 回答