Bagaimana saya bisa mendapatkan semua konstanta jenis apa pun menggunakan refleksi?
c#
.net
reflection
constants
masoud ramezani
sumber
sumber
Jawaban:
Meskipun ini kode lama:
Sumber
Anda dapat dengan mudah mengubahnya menjadi kode pembersih menggunakan obat generik dan LINQ:
Atau dengan satu baris:
sumber
IsLiteral
kataif its value is written at compile time
dan itu hanya berlaku untuk konstanta, yaitu bagaimana itu berlaku sekarang (diuji pada .NET 4.5.2)Jika Anda ingin mendapatkan nilai dari semua konstanta dari tipe tertentu, dari tipe target, berikut adalah metode ekstensi (memperluas beberapa jawaban di halaman ini):
Lalu untuk kelas seperti ini
Anda dapat memperoleh nilai
string
konstan seperti ini:sumber
.Where(fi => fi.IsLiteral && !fi.IsInitOnly).Select(x => x.GetRawConstantValue()).OfType<T>().ToList();
:?Sebagai Jenis ekstensi:
sumber
IEnumerable<T>
bukanIList
?Gunakan
property.GetConstantValue()
untuk mendapatkan nilai.sumber
GetRawConstantValue()