Ich versuche, eine generische Methode zu erstellen, die ein Attribut für eine Klasse liest und diesen Wert zur Laufzeit zurückgibt. Wie würde ich das machen?
Hinweis: Das DomainName-Attribut gehört zur Klasse DomainNameAttribute.
[DomainName("MyTable")]
Public class MyClass : DomainBase
{}
Was ich zu generieren versuche:
//This should return "MyTable"
String DomainNameValue = GetDomainName<MyClass>();
c#
generics
custom-attributes
Zaffiro
quelle
quelle
Antworten:
AKTUALISIEREN:
Diese Methode könnte weiter verallgemeinert werden, um mit jedem Attribut zu arbeiten:
und verwenden Sie wie folgt:
quelle
const Filed
in die statische Klasse zu gelangen ?Dafür gibt es bereits eine Erweiterung.
So:
quelle
quelle
Ich habe Darin Dimitrovs Antwort verwendet, um eine generische Erweiterung zu erstellen, mit der Mitgliedsattribute für jedes Mitglied in einer Klasse abgerufen werden können (anstelle von Attributen für eine Klasse). Ich poste es hier, weil andere es vielleicht nützlich finden:
Anwendungsbeispiel:
quelle
Eine vereinfachte Version von Darin Dimitrovs erster Lösung:
quelle
Hier ist ein gutes Tutorial, wenn Sie es noch nicht gesehen haben http://msdn.microsoft.com/en-us/library/aa288454(VS.71).aspx
Von besonderem Interesse für Sie ist der Abschnitt Zugriff auf das Attribut http://msdn.microsoft.com/en-us/library/aa288454(VS.71).aspx#vcwlkattributestutorialanchor3
quelle
Wahrscheinlich genauso einfach, den Körper der generischen Funktion inline zu verwenden. Es macht für mich keinen Sinn, die Funktion über den Typ MyClass generisch zu machen.
quelle
Für den Fall, dass jemand ein nullbares Ergebnis benötigt und dies für Enums, PropertyInfo und Klassen funktioniert, habe ich es wie folgt gelöst. Dies ist eine Modifikation der aktualisierten Lösung von Darin Dimitrov.
Anwendungsbeispiele:
quelle
Schreiben Sie lieber viel Code, als dies zu tun:
quelle
quelle