Próbuję utworzyć metodę ogólną, która odczyta atrybut klasy i zwróci tę wartość w czasie wykonywania. Jak miałbym to zrobić?
Uwaga: atrybut DomainName ma klasę DomainNameAttribute.
[DomainName("MyTable")]
Public class MyClass : DomainBase
{}
Co próbuję wygenerować:
//This should return "MyTable"
String DomainNameValue = GetDomainName<MyClass>();
c#
generics
custom-attributes
Zaffiro
źródło
źródło
Odpowiedzi:
AKTUALIZACJA:
Tę metodę można dodatkowo uogólnić, aby działała z dowolnym atrybutem:
i użyj w ten sposób:
źródło
const Filed
klasę statyczną?Istnieje już rozszerzenie, które to umożliwia.
Więc:
źródło
źródło
Użyłem odpowiedzi Darina Dimitrova, aby utworzyć ogólne rozszerzenie, aby uzyskać atrybuty elementu członkowskiego dla dowolnego członka w klasie (zamiast atrybutów dla klasy). Publikuję to tutaj, ponieważ inni mogą uznać to za przydatne:
Przykład użycia:
źródło
Uproszczona wersja pierwszego rozwiązania Darina Dimitrova:
źródło
Oto dobry samouczek, jeśli go wcześniej nie widziałeś http://msdn.microsoft.com/en-us/library/aa288454(VS.71).aspx
Szczególnie interesująca jest sekcja tutaj o nazwie Dostęp do atrybutu http://msdn.microsoft.com/en-us/library/aa288454(VS.71).aspx#vcwlkattributestutorialanchor3
źródło
Prawdopodobnie równie łatwy w użyciu korpus funkcji ogólnych w treści. Nie ma dla mnie żadnego sensu, aby funkcja była ogólna dla typu MyClass.
źródło
Na wypadek, gdyby ktoś potrzebował wyniku dopuszczającego wartość null i aby działał on między Enums, PropertyInfo i klasami, oto jak to rozwiązałem. To modyfikacja zaktualizowanego rozwiązania Darina Dimitrova.
Przykłady użycia:
źródło
Zamiast pisać dużo kodu, po prostu zrób to:
źródło
źródło