类验证方法中的C#NullReferenceException

时间:2013-04-26 17:47:13

标签: c# class validation

我正在尝试添加一个帮助方法来清除我班级中的任何非字母数字字符。但是,我一直收到错误

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 个答案:

答案 0 :(得分: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);
    }

答案 1 :(得分:0)

在属性的set部分,您有一个隐含对象value,其中包含您要设置的值...使用此值作为基础

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

答案 2 :(得分:0)

您是否先在任何地方初始化年龄?

它在char[] arr = this.AgentId.ToCharArray();

失败了

答案 3 :(得分:0)

您永远不会在您的二传手中引用value。你想做这样的事情:

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