2009-12-02 67 views
1

我有這種方法,並希望從FieldInfos獲得所有屬性?如何得到它?如何從C#中的FieldInfo獲取屬性?

private static void FindFields(ICollection<FieldInfo> fields, Type t) 
    { 
    var flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly; 

    foreach (var field in t.GetFields(flags)) 
    { 
     fields.Add(field); 
    } 

    var baseType = t.BaseType; 
    if (baseType != null) 
    { 
     FindFields(fields, baseType); 
    } 
    } 

    var fields = new Collection<FieldInfo>(); 
    FindFields(fields, this.GetType()); 

謝謝。

此致敬禮。

+0

也許你是混亂的屬性和領域。你是否想要支持你在方法中收集的字段的屬性的'PropertyInfo',或者你想要所有這些字段的值? – 2009-12-02 22:55:48

+0

我希望像.Text,.Name,.Size等所有這些字段的值... – Jooj 2009-12-02 23:13:25

+0

是否要使用反射來獲取所有字段,然後使用反射來獲取每個FieldInfo上的所有屬性並顯示值?看起來馬丁霍說你可能會把領域混淆不清。 – 2009-12-03 00:50:21

回答

3

要獲取特定對象的字段值,請使用GetValue並傳遞要獲取其值的對象。

var fields = new Collection<FieldInfo>(); 
FindFields(fields, this.GetType()); 

foreach (var field in fields) 
{ 
    Console.WriteLine("{0} = {1}", field.Name , field.GetValue(this)); 
}