2017-08-03 2 views
0

Lassen Sie uns sagen, dass ich diese Methode, die Zeichenfolge als Extension-Parameter erhält:Ist es möglich, Eigenschaftsnamen von Erweiterungsmethode erhalten

private static List<string> ValidationErrors = new List<string>(); 

private static void ErrorCheck<T>(this string str) 
{ 
    if (string.IsNullOrEmpty(str)) 
    { 
     // This just returns "str"                  
     // Instead of property name (see "How I use" section") 
     ValidationErrors.Add(typeof(T).Namespace + "[" + nameof(str) + "]"); 
    } 
} 

Und das ist, wie ich es verwenden:

Car.Color.ErrorCheck<Car>(); 

Wo Die Farbe des Auto-Objekts ist nur eine String-Eigenschaft. Also was ich will, ist "Farbe" anstelle von "str" ​​in meiner Erweiterungsmethode zu bekommen.

Irgendwelche Ideen, wie ich das erreichen könnte?

+1

'Car.Color.ErrorCheck ()' Die Tatsache, dass Sie Typen Mismatch könnte (zB 'Car.Color.ErrorCheck ()') sollten Sie in Hinweis, dass Ihr aktuelles System ist fehlerhaft. Wenn Sie eine Zeichenfolge als Parameter übergeben, können Sie nicht wissen, woher diese Zeichenfolge ursprünglich stammt (in Ihrem Fall "Car.Color"). Eine viel praktikablere Lösung (und weniger anfällig für Entwicklerfehler) wäre etwas wie "Car.ErrorCheck (x => x.Color)" – Flater

+0

Ja, danke! Daran habe ich vor Ihrem Kommentar nicht gedacht. Klingt plausibel. –

Antwort

2

Nein, das ist nicht möglich. C# hat ein paar Optionen:

+1

Warum haben Sie die Frage erneut geöffnet? Es war ein gültiges Duplikat. Nur um sich selbst zu beantworten und das duplizierte Ziel zu verlinken? –

+2

@PatrickHofman ist kein exaktes Duplikat. theres der 'nameof' Ansatz auch. –

+2

Dann sollten Sie das zu dem doppelten Ziel hinzugefügt haben, die Frage nicht erneut öffnen. –

Verwandte Themen