2012-07-18 92 views
0

我有以下代碼:檢查Null值的對象

class Person 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public Address address { get; set; } 

    public Person GetFullName() 
    { 
     return new Person { }; 
    } 
} 

public class Address 
{ 
    public int Name { get; set; } 
} 

我需要檢查,如果人不爲空並且還包含了地址。對於這個下面的代碼工作:

class Program 
    { 

     static void Main(string[] args) 
     { 

      Person person = new Person(); 
      person.FirstName="bla"; 
      if (person != null && person.address != null) 
      { 
       Console.WriteLine(person.address.Name); 
      } 


     } 
    } 

問我有:

如何爲person.Address執行該代碼應該扔空異常?

if (person != null && person.address != null) 

回答

3

你的代碼是完全正常

if (person != null && person.address != null) 

作品時person爲null,因爲C#一旦它遇到一個計算結果爲假結束表達式語句的評價。

你的代碼是一樣的如下:

if (person != null) 
{ 
    if (person.address != null) 
    { 
     // do stuff 
    } 
} 

其他語言(ADA)是不一樣的。在那裏,評估表達式的順序不是由操作的「成本」確定或確定的。還有,如果你想強制計算順序,你必須使用and then(或or else)結構:

if (person != null and then person.address != null) 

這使得代碼更清晰,但是這是對所有已爲它去。

1

檢查無效的正確方法是if(person != null)。如果你做if(!person.Equals(null))那麼你會得到一個NullReferenceException if person == null。這是有趣的,因爲避免這種例外是首要的目標。

您的代碼執行,因爲如果person != null爲真,那麼它就開始查看下一個語句,即person.address != null。如果第一條語句返回false,則由於運算符的原因它甚至不會查看下一條語句。

編輯:你也可能想知道person.address.Name從不爲空,因爲這是一個整數。默認情況下,它的值是0而不是null。當然,這隻適用於類成員字段,因爲本地方法級字段必須在使用前明確賦值。

+0

感謝您的回答,它的乾淨。 – 2012-07-18 11:06:10