2017-03-01 5 views
0

Wenn ich eine Klasse in C# deklariere, kann ich Attribute wie String-Länge festlegen?Attribute z. length for string

z.B. sagen meine Klasse ist:

public class MyClass 
{ 
    public string SomeString1 {get; set;} 
    public string AnotherString2 {get; set;} 
} 

Gibt es eine Möglichkeit, dass SomeString1 angeben nur Zeichen lang x?

+0

tun Klingt wie ein Job für AOP ... –

+1

Klingt wie ein [XY-Problem] (http://xyproduk.info/) –

+0

Sie müssen entscheiden, welche Aktion ausgeführt werden soll, wenn ich versuche, eine * längere * Zeichenfolge zu setzen. Soll es eine Ausnahme sein? Soll die Saite getrimmt werden? Etwas anderes? –

Antwort

1

Sie können die StringLengthAttribute in .NET DataAnnotations Klasse verwenden:

[StringLength(40, ErrorMessage = "Name cannot be longer than 40 characters.")] 
public string YourString { get; set; } 

Wenn Sie in MVC arbeiten, werden diese DataAnnotations auf eingehende Anfragen validiert werden und eventuelle Fehlermeldungen können automatisch in Ihrem verwandten angezeigt Aussicht.

Wenn Sie nicht in MVC arbeiten, oder wollen einfach nur eine Instanz der Klasse ad-hoc zu validieren, können Sie die Validator-Klasse verwenden: How to manually validate a model with attributes?

+2

Hängt davon ab, wer die Informationen sammeln soll. Z.B. Die Kernlaufzeit begrenzt die Länge eines Strings nicht, unabhängig davon, welches Attribut angehängt wird. –

+1

nur nützlich, wenn sie eine Technologie verwenden, die auf DataAnnotations wartet, aber sonst gute Antwort – MikeT

+0

Die Validator-Klasse kann für Ad-hoc-Validierung in> = .net 4 wie in meiner Antwort erwähnt verwendet werden. –

1

Was Sie für die Validierung ist fragen, und es gibt mehrere verschiedene Validierung Routen in der .net Framework

einige Beispiele sind IDataErrorInfo, INotifyDataErrorInfo und ValidationRule

welches ist das richtige für Sie hängt davon ab, was Sie tun

WPF ist so konzipiert, diese in Ansichten automatisch enthalten, so einige gute Beispiele wie here bietet aber sie arbeiten auch nur für die manuelle Validierungstests

public class MyClass: IDataErrorInfo 
{ 
    public string SomeString1 { get; set; } 
    public string AnotherString2 { get; set; } 

    public bool IsValid 
     => string.IsNullOrWhiteSpace(Error); 
    public string Error 
     => this["All"]; 

    public string this[string field] 
    { 
     get 
     { 
      string err = ""; 
      if (field == "All" || "SomeString1" == field) 
      { 
       if (SomeString1.Length > 15) 
        err += "SomeString1 > 15"; 
       if (SomeString1.Length < 5) 
        err += "SomeString1 < 5"; 
      } 
      if (field == "All" || nameof(AnotherString2) == field) 
      { 
       err += StringLenthRule(AnotherString2, nameof(AnotherString2), 30, 20); 
      } 
      return err; 
     } 
    } 
    private string StringLenthRule(string str, string prop,int max, int min) 
    { 
     string err = ""; 
     if (str.Length > max) 
      err += $"{prop} > {max}\n"; 
     if (str.Length < min) 
      err += $"{prop} < {min}\n"; 
     return err; 

    } 
} 

dann würden Sie

MyClass node = new MyClass(xmlNode); 

if(node.IsValid) 
{ 
    //use class 
} 
else 
{ 
    display(node.Error) 
} 
+0

danke. Der Kontext ist ein Web-Service, der die XML-Datei analysiert und jeden Knoten in eine Datenbankdatei lädt. So verstehe ich, dass ich jeden Knoten selbst validieren müsste. – Dave

+0

Der allgemeine Weg wäre, die Daten in die Klasse zu laden und dann die Gültigkeit zu überprüfen, die 'public bool IsValid => string.IsNullOrWhiteSpace (IDataErrorInfo.Error)' verwenden könnte, die Ihnen dann sagen würde, ob die Klasse gültig ist und nicht Fehlereigenschaft identifiziert das Problem, Sie können dies verwenden, um die XML- oder automatische/manuelle Korrektur zu verwerfen – MikeT

Verwandte Themen