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

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

您是否首先在任何地方初始化agentid?

它失败了char[] arr = this.AgentId.ToCharArray();

于 2013-04-26T17:51:46.217 回答
0

你永远不会value在你的 setter 中引用。你想做这样的事情:

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 回答