2016-04-23 19 views
1

Ive got den folgenden Code:Argument in C# Setter

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

ich untersuchen habe, und dies sollte die Art und Weise, es zu tun grob, aber aus irgendeinem Grunde ein Argument immer geworfen wird.

+1

Wie sieht 'MailAddress' Konstruktor aussehen? – hillin

+1

Ich nehme an, Sie meinen eine "NullReferenceException" ... aber es ist überhaupt nicht klar, warum der Code, den Sie gezeigt haben, das werfen würde, es sei denn, es liegt innerhalb des Konstruktors 'MailAddress'. Bitte geben Sie [mcve] an, um das Problem zu demonstrieren. –

+2

Ich denke, der Setter muss "Wert", aber nicht "E-Mail" verwenden. Das ist der Name des Parameters ist "Wert". https://msdn.microsoft.com/es-es/library/w86s7x04.aspx –

Antwort

4

Das liegt daran, dass Sie die Eigenschaft Getter innerhalb der verwenden Setter der gleichen Eigenschaft und MailAddress wird NullReferenceException geben, wenn Adresse im Konstruktor übergeben ist null. Eher sollten Sie verwenden 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"); 
      } 
     } 
    } 
+0

Das war es Kumpel! Vielen Dank! –

2

Ihr Setter ist falsch, Sie die Eigenschaft zurück setzen, indem Sie wieder Eigenschaft Getter, die offensichtlich null ist, müssen Sie value wie verwenden:

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