Jak uzyskać wszystkie stałe dowolnego typu za pomocą odbicia?
c#
.net
reflection
constants
masoud ramezani
źródło
źródło
Odpowiedzi:
Chociaż to stary kod:
Źródło
Możesz łatwo przekonwertować go na czystszy kod za pomocą typów ogólnych i LINQ:
Lub jedną linią:
źródło
IsLiteral
mówiif its value is written at compile time
i jest prawdziwa tylko dla stałych, tak to zachowuje się teraz (testowane od .NET 4.5.2)Jeśli chcesz uzyskać wartości wszystkich stałych określonego typu, z typu docelowego, oto metoda rozszerzenia (rozszerzająca niektóre odpowiedzi na tej stronie):
Następnie dla takiej klasy
Możesz otrzymać
string
stałe wartości w następujący sposób:źródło
.Where(fi => fi.IsLiteral && !fi.IsInitOnly).Select(x => x.GetRawConstantValue()).OfType<T>().ToList();
:?Jako rozszerzenia typu:
źródło
IEnumerable<T>
zamiast anIList
?Użyj,
property.GetConstantValue()
aby uzyskać wartość.źródło
GetRawConstantValue()