2016-08-05 16 views
0

Ich stehe vor dem Problem, eine Eigenschaft zu validieren, deren Validierungseigenschaften mit dem entsprechenden Feldnamen verknüpft sind.C# Abrufen des Feldnamens von der Eigenschaft

int _myIntField; 
public int MyIntField { 
    get { return _myIntField; } 
    set { _myIntField = value; } 
} 

Wenn nun ein Binding Objekt Validierung, habe ich Zugriff auf die BindingField, die den Namen der Eigenschaft zurückgibt MyIntField, nicht den Feldnamen _myIntField.

Ist es irgendwie möglich, _myIntField für die Eigenschaft abzurufen? Wenn das so ist, wie?

+1

Nun, wenn Sie Namenskonvention fest ist, könnten Sie einfach eine auf den ersten Buchstaben ersetzen ... 'string name = "_" + Char.ToLowerInvariant (Eingang [0]) + input.Substring (1); ' – musefan

+1

Sie könnten Roslyn darauf gehen. Betrachten Sie für eine werkseitige Vorgehensweise Folgendes: 'int Foo {get {return _bar * _baz> 0? _pete: _barney; }} '. Was ist das Feld für 'Foo'? Sie können entscheiden, Code zu schreiben, der die eine oder andere Annahme zu dieser Frage macht, aber das .NET-Framework kann keine Annahmen treffen, die für alle sinnvoll oder nützlich sind. –

+0

Mögliches Duplikat von [Wie bekomme ich das Getter-Backing-Feld von PropertyInfo?] (Http://stackoverflow.com/questions/38490739/how-to-get-getter-backing-field-from-propertyinfo) – thehennyy

Antwort

0

Eigentlich für meinen Fall, ich habe eine Behelfslösung haben: Ich habe ein benutzerdefiniertes Attribut erstellt die zugehörigen Feldnamen als Parameter unter ...

int _myIntField; 
[MyAttribue("_myIntField")] 
public int MyIntField { 
    get { return _myIntField; } 
    set { _myIntField = value; } 
} 

Aus Gründen der Vollständigkeit, hier ist das Attribut des Erklärung:

public class MyAttribue : ValidationAttribute { 
    protected readonly string _fieldName; 

    public MyAttribue(string fldName) { 
     _fieldName = fldName; 
    } 

    protected override ValidationResult IsValid(object value, ValidationContext validationContext) { 
     if (validationContext == null) { 
     return ValidationResult.Success; 
     } 
     ErrorMessage = string.Empty; 

     if (validationContext.ObjectInstance != null) { 
     // do whathever validation is required using _fieldName... 
     } 
     // 
     if (!string.IsNullOrWhiteSpace(ErrorMessage)) { 
     return new ValidationResult(ErrorMessage); 
     } 
     return ValidationResult.Success; 
    } 
    } 
Verwandte Themen