2011-08-19 74 views
1

我知道有噸的這些實例,但我仍然堅持,我有以下代碼:C#對象引用不設置到對象

public void SetUser(User user) 
{ 
    string streetNumber = ""; 

    if (user.Address.StreetNo != null) 
     streetNumber = user.Address.StreetNo.ToString(); 
    else 
    streetNumber = ""; 
} 

我得到了日益流行的「對象未設置到一個對象的一個​​實例。「問題。 它可能是一個非常基本的東西,我noob的頭腦不能接受,但我會感謝您的幫助,所以在先進的感謝。

+0

是用戶用戶的實例? –

+0

首先檢查用戶是否爲空然後user.Address不爲空,然後只有StreeNo ... –

+0

堆棧跟蹤指向您?你確定「用戶」不會爲空嗎?對不起,但我無法從你的代碼中知道。它可能是用戶的地址是空的,它可能是StreeetNo - 它可能幾乎是所有內容 – Carsten

回答

2
public void SetUser(User user) 
{ 
    string streetNumber = ""; 

    if (user != null && user.Address != null && user.Address.StreetNo != null) { 
     streetNumber = user.Address.StreetNo.ToString(); 
    } 
} 

考慮到@ CKoenig的建議,以下將引發用戶或user.Address是空的異常:

public void SetUser(User user) 
{ 

    if (user == null) { 
     throw new System.ArgumentNullException("user", "user cannot be null"); 
    } 

    if (user.Address == null) { 
     throw new System.ArgumentNullException("Address", "Address cannot be null"); 
    } 

    string streetNumber = ""; 

    if (user.Address.StreetNo != null) { 
     streetNumber = user.Address.StreetNo.ToString(); 
    } 
} 
+0

如果其中任何一個都爲null,那麼我會推薦拋出 - 如果該方法因爲沒有設置它而不應該用於執行,則該方法被命名爲「SetUser」。 – Carsten

+0

方法名稱必須錯誤。它不會像方法主體描述的那樣做任何事情。 – Amy

+0

@Inuyasha OP可以簡化他們的方法只留下這部分似乎是拋出異常 – Curt

1

user爲空或user.Address爲空。你也需要測試它們。

+0

不,你錯過了這個條款:'if(user.Address.StreetNo!= null)'。他已經在檢查'user.Address.StreetNo'是否爲空。問題是如果'user'或'user.Address'中的任何一個爲空,這個測試本身就會拋出異常。 – cdhowie

+0

非常抱歉 - 你是對的...最好先考慮......但是唉然後會有10個答案;) – Carsten

+0

謝謝你們+1,因爲你提供的答案是正確的,因爲他提供了答案。 – Anicho

1

檢查堆棧跟蹤和:

  • 用戶
  • user.Address
  • user.Address.StreetNo

使用if ... == null,則...

1
if (user != null 
    && user.Address != null 
    && user.Address.StreetNo != null) 
{ 
    // ... 
} 
2
public void SetUser(User user) 
{  
    string streetNumber = String.Empty;  

    if (user!= null 
     && user.Address != null 
     && user.Address.StreetNo != null)  
    { 
     streetNumber = user.Address.StreetNo.ToString();  
    } 
} 
相關問題