【问题标题】:Class of Nullable objects可空对象类
【发布时间】:2013-07-29 13:47:41
【问题描述】:

这个问题比任何事情都更令人好奇......

假设有这样一个类:

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 处于崩溃状态,否则我会测试自己)

【问题讨论】:

  • 你运行它看看会发生什么?
  • @Jedediah 我不能。我的 Visual Studio 停止工作。 (如上所述)
  • 如果您的开发工具包停止工作,去修复它 ;p 这比学术问题更重要
  • @MarcGravell 我正在修复它! :)

标签: c# class logic nullable


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    正如你所说, foo 本身仍然是一个实例化对象,无论其成员数据的值如何,所以 else 语句会打印出来。

    【讨论】:

      【解决方案3】:

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

      您可以通过foo1 = nullfoo1设置为null

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2021-06-07
          • 2016-01-16
          • 2022-01-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-14
          • 1970-01-01
          相关资源
          最近更新 更多