2013-04-26 78 views
0

我試圖添加一個幫助器方法來擦除我的類中的任何非字母數字字符。不過,我不斷收到錯誤類驗證方法中的C#NullReferenceException

NullReferenceException: Object reference not set to an instance of an object. 

不知道我在做什麼錯在這裏,因爲我認爲這是建立任何形式的驗證類中的正確方法。任何建議,將不勝感激。

private string agentId; 
    public string AgentId 
    { 
     get { return agentId; } 
     set { agentId = this.scrubAgentId(); } 
    } 

    private string scrubAgentId() 
    { 
     char[] arr = this.AgentId.ToCharArray(); 

     arr = Array.FindAll<char>(arr, (c => (char.IsLetterOrDigit(c)))); 
     return new string(arr); 
    } 
+2

AGENTID是scrubAgentId的'字符空[] = ARR this.AgentId.ToCharArray();' – 2013-04-26 17:49:00

回答

6

這根本就不對。執行設置時,您將丟棄value。它可能需要看更多的東西是這樣的:

private string agentId; 
    public string AgentId 
    { 
     get { return agentId; } 
     set { agentId = this.scrubAgentId(value); } 
    } 

    private string scrubAgentId(string value) 
    { 
     if(value == null) 
      return value; 
     char[] arr = value.ToCharArray(); 

     arr = Array.FindAll<char>(arr, (c => (char.IsLetterOrDigit(c)))); 
     return new string(arr); 
    } 
+0

完美,謝謝! – NealR 2013-04-26 17:54:38

0

在屬性的set部分你有一個隱含的對象,value持有你想設置...使用此值作爲基礎值

private string agentId; 
public string AgentId 
{ 
    get { return agentId; } 
    set { agentId = value; } // manipulate value here using your method 
} 
0

你是否在初始化agentid?

其未能在char[] arr = this.AgentId.ToCharArray();

0

你從來沒有在您的二傳手引用value。你想要做這樣的事情:

private string agentId; 
public string AgentId 
{ 
    get 
    { 
     return agentId ; 
    } 
    set 
    { 
     agentId = new string(value.ToCharArray().Where(c => c.IsLetterOrDigit(c))) ; 
    } 
} 
+0

如果調用者嘗試設置'AgentId = null;' – 2013-04-26 18:02:20

+0

這會引發異常顯然。你可能會注意到'這樣的'資格。如何處理邊緣案例應該非常明顯(並且取決於所需的屬性語義)。 – 2013-04-26 18:05:27