2017-04-28 3 views
0

Ich möchte "Grund nicht explizit" anzeigen, wenn der Benutzer dieses Feld oder die Benutzereingabe nicht füllt, wenn er es füllt. Mit diesem Code verstehe ich nicht warum, aber selbst wenn ich das Feld ausfülle, wird "Grund nicht explizit" angezeigt.Überprüfen Null oder leere Zeichenfolge

private string reason; 
    public string Reason 
    { 
     get 
     { 
      return this.reason; 
     } 
     set 
     { 
      if (string.IsNullOrEmpty(this.Reason)) 
       this.reason = "reason not explicited"; 
      else this.reason = value; 
     } 
    } 

    [Pure] 
    public static bool IsNullOrEmpty(String value) { 
     return (value == null || value.Length == 0); 
    } 
+2

'if (string.IsNullOrEmpty (value)) this.reason = "reason not explicited" ...; ' –

+2

Verwenden Sie stattdessen eine einfache clientseitige Validierung, um die entsprechende Validierungsnachricht anzuzeigen. Sie können auch Eigenschaftenattribute verwenden, wenn Sie die mvc-Validierung verwenden. Schreiben Sie das nicht hart in Ihre Modelllogik. – Igor

Antwort

6

nur value in Ihrem Setter verwenden das richtige Verhalten

set 
{ 
    if (string.IsNullOrEmpty(value)) 
     this.reason = "reason not explicited"; 
    else 
     this.reason = value; 
} 
3

zu handhaben, weil Sie die Eigenschaft anstelle des Wertes prüft wird.
Ihr aktueller Code legt den Wert der Eigenschaft nur fest, wenn sie null oder leer ist.
Es sollte

set 
    { 
     if (string.IsNullOrEmpty(value)) 
      this.reason = "reason not explicited"; 
     else this.reason = value; 
    } 

Oder noch besser:

set 
    { 
     this.reason = (string.IsNullOrEmpty(value)) ? "reason not explicited": value; 
    } 
0

Sie Wert auf die Funktion IsNullOrEmpty Funktion

if (string.IsNullOrEmpty(value)) 
       this.reason = "reason not explicited"; 
      else this.reason = value; 
0

Der Setter auslösen, wenn Sie ändern passieren müssen (zuweisen), wenn der Benutzer dieses Feld überspringt, bedeutet dies, dass der Setter nicht ausgelöst wird. Der Getter wird jedoch ausgelöst, wenn Sie auf den Wert der Eigenschaft zugreifen. In Ihrem Fall also, wenn Sie die Logik innerhalb des get anwenden, wird es die "reason not explicited" anzeigen, wenn der Grund Null oder leer ist. So ist die neue Logik wäre wie folgt aus:

get 
{ 
    if (string.IsNullOrEmpty(this.reason)) 
     return "reason not explicited"; 
    else this.reason = value; 
     return this.reason; 
} 
set 
{ 
    this.reason = value; 
} 

Eine andere Lösung sieht wie folgt sein:

Initialisieren Sie die Backup-Eigenschaft mit dem "reason not explicited" so, auch wenn der Benutzer das Feld überspringen Sie (Setter nicht auslösen) wird den Standardwert erhalten, der gedruckt werden soll. Und Sie haben die Backup-Eigenschaft aktualisieren basierend auf der value

private string reason = "reason not explicited"; 

public string Reason 
{ 
    get { return this.reason; } 
    set 
    { 
     if (String.IsNullOrEmpty(value)) 
      this.reason = "reason not explicited"; 
     else 
      this.reason = value; 
    } 
} 
+0

Getter sollte Werte nicht ändern. – Aphelion

+0

Falsche Lösung. –

+0

Ich würde es nicht empfehlen. Getter sollte den tatsächlichen Wert zurückgeben. – ATC

1

Das Problem in dieser Codezeile ist

if (string.IsNullOrEmpty(this.Reason)) 

Wenn Sie versuchen, den Wert dieser Eigenschaft zu erhalten, ruft es Getter, welcher Wert von reason Feld zurückgibt. Und dieses Feld ist nicht mit dem richtigen Wert gefüllt, wenn Sie versuchen, einen Wert dafür zu erhalten.

So sollten Sie Ihren Code ändern, zu überprüfen, ob null oder eine leere Zeichenfolge aus Beton Eingabewert:

if (string.IsNullOrEmpty(value)) 
3

Sie haben value zu überprüfen, nicht this.Reason:

public string Reason 
    { 
     get 
     { 
      return this.reason; 
     } 
     set 
     { 
      this.reason = string.IsNullOrEmpty(value) 
       ? "reason not explicited" 
       : value; 
     } 
    } 
Verwandte Themen