Nullable对象的类

时间:2013-07-29 13:47:42

标签: c# class logic nullable

这个问题更像是一种好奇心......

假设有一个类:

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或我自己测试)

4 个答案:

答案 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()方法。