这个问题更像是一种好奇心......
假设有一个类:
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是在fritz或我自己测试)
答案 0 :(得分:5)
变量的null状态不依赖于它指向的实例的任何属性。
答案 1 :(得分:2)
正如你所说,foo本身仍然是一个实例化的对象,无论其成员数据的值如何,因此else语句将被打印。
答案 2 :(得分:0)
你将拥有其他的foo1 is not NULL
,对象本身不是null,但属性是。
您可以foo1
foo1 = null
设置为空
答案 3 :(得分:0)
foo1
仍然是一个实例化对象,因此不会为null,因此Console.WriteLine("foo1 is not NULL");
将被执行。
如果你真的需要foo1 == null
如果x和y为null则返回true,那么你可以覆盖==
运算符和Equals()
方法。