C#setter

时间:2016-04-23 11:04:10

标签: c# setter argumentnullexception

我有以下代码:

private string _email;
public string email
{
    get { return _email; }
    set
    {
        try
        {
            MailAddress m = new MailAddress(email);
            this._email = email;
        }
        catch (FormatException)
        {
            throw new ArgumentException("Wrong email format");
        }
    }
}

我一直在调查,这应该是粗略地做的方式,但由于某种原因,总是抛出ArgumentNullException。

2 个答案:

答案 0 :(得分:4)

这是因为你在同一属性的setter中使用属性getter,如果构造函数中传递的Address为null,MailAddress将给NullReferenceException。相反,您应该使用value

    public string email
    {
        get { return _email; }
        set
        {
            try
            {
                MailAddress m = new MailAddress(value);
                this._email = value;
            }
            catch (FormatException)
            {
                throw new ArgumentException("Wrong email format");
            }
        }
    }

答案 1 :(得分:2)

你的setter错了,你是通过再次使用属性getter设置属性,显然是null,你需要使用value,如:

try
  {
      MailAddress m = new MailAddress(value);
      this._email = value;
  }
  catch (FormatException)
  {
      throw new ArgumentException("Wrong email format");
  }