Yansıma yoluyla genel statik bir alanın değerini elde edin


90

Şimdiye kadar yaptığım şey bu:

 var fields = typeof (Settings.Lookup).GetFields();
 Console.WriteLine(fields[0].GetValue(Settings.Lookup)); 
         // Compile error, Class Name is not valid at this point

Ve bu benim statik sınıfım:

public static class Settings
{
   public static class Lookup
   {
      public static string F1 ="abc";
   }
}

10
Bunun propsyerine değişkeni çağırmanın fieldsgelecekteki bir geliştiriciyi şaşırtacağına dikkat edin . Mülkler kendilerine ait şeylerdir ve alanlar kesinlikle onlar değildir.
ErikE

Yanıtlar:




7

İmzası FieldInfo.GetValueDİR

public abstract Object GetValue(
    Object obj
)

objDeğeri almak istediğiniz nesne örneği nerede veya nullstatik bir sınıfsa. Yani bu şunu yapmalı:

var props = typeof (Settings.Lookup).GetFields();
Console.WriteLine(props[0].GetValue(null)); 

1
Değişken isimlerine güvenmeyin ... OP GetProperties'i değil GetFields'ı arıyor;)
Thomas Levesque

@ PauliØsterø ikincisi neye nullkarşılık gelir? FieldInfo.GetValueSadece tek bir parametreyi kabul etmiyor mu ? Aşırı yüklenmeleri GetValueveya başka bir şeyi bulamıyorum
Thomas Flinkow

@ThomasFlinkow sadece yazım hatası, şimdi düzeltildi
Pauli Østerø

@ PauliØsterø öyle düşündü :) sadece sorudaki kodun kopyala-yapıştır hazır olduğundan emin olmak istedim. Yani iyi bir cevap için +1.
Thomas Flinkow

4

Bunu dene

FieldInfo fieldInfo = typeof(Settings.Lookup).GetFields(BindingFlags.Static | BindingFlags.Public)[0];
    object value = fieldInfo.GetValue(null); // value = "abc"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.