0

クラス内の英数字以外の文字を削除するヘルパー メソッドを追加しようとしています。ただし、エラーが発生し続けます

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);
    }
4

4 に答える 4

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);
    }
于 2013-04-26T17:50:07.010 に答える
0

最初にagentidをどこかで初期化していますか?

その失敗char[] arr = this.AgentId.ToCharArray();

于 2013-04-26T17:51:46.217 に答える
0

プロパティのset一部には、設定する値を保持する暗黙的なオブジェクトがvalueあります...この値をベースとして使用します

private string agentId;
public string AgentId
{
    get { return agentId; }
    set { agentId = value; } // manipulate value here using your method
}
于 2013-04-26T17:51:32.430 に答える
0

You never reference the value in your setter. You want to do something like this:

private string agentId;
public string AgentId
{
    get
    {
      return agentId ;
    }
    set
    {
      agentId = new string( value.ToCharArray().Where( c => c.IsLetterOrDigit(c) ) ) ;
    }
}
于 2013-04-26T17:54:09.577 に答える