2013-07-29 65 views
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。我對可空類型的概念很陌生,所以這引起了我的好奇心! (我的視覺工作室是在弗裏茨或我會測試自己)

+0

你運行它看看會發生什麼? – Jedediah

+0

@Jedediah我不能。我的Visual Studio停止工作。 (如上所述) – juleekwin

+5

如果你的開發工具包停止工作,*去修復*; p這比學術問題更重要 –

回答

2

正如你所說的,foo本身仍然是一個實例化對象,不管其成員數據的值如何,所以else語句將被打印。

5

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

變量的空狀態不依賴於它指向的實例的任何屬性。

0

您將會有其他的請求foo1 is not NULL,對象本身不是null,但屬性是。

您可以通過foo1 = null

0

foo1設置foo1爲空仍然是一個實例化的對象,因此不會爲空,因此Console.WriteLine("foo1 is not NULL");會被處決。

如果您真的需要foo1 == null返回true,如果x和y爲空,那麼您可以覆蓋==運算符和Equals()方法。