2013-07-12 44 views
0

我想從某個對象獲取字段的信息,但是在從嵌套類中檢索數據時遇到困難。 GetFields()來自遞歸調用返回FieldInfo[0]C#GetFields()從嵌套類中提取數據

這裏的代碼示例。

public class Test1 
    { 
     public string Name; 
     public int Id; 
     public object Value; 
     public Test2 Test; 
    } 

    public class Test2 
    { 
     public float Value; 
     public bool IsEnable; 
    } 

    class Program 
    { 
     static void Main() 
     { 
      var test1 = new Test1 
       { 
        Name = "Test 1", 
        Id = 1, 
        Value = false, 
        Test = new Test2 
         { 
          Value = 123, 
          IsEnable = true, 
         }, 
       }; 

      GetTypeFields(test1); 

      Console.ReadLine(); 
     } 

     public static void GetTypeFields(object data) 
     { 
      var fields = data.GetType().GetFields(); 

      foreach (var fi in fields) 
      { 
       var type = fi.FieldType; 

       if (type.IsValueType || type == typeof(string) || type == typeof(object)) 
       { 
        Console.WriteLine(fi.FieldType + " : " + fi.Name + " = " + fi.GetValue(data)); 
       } 

       if (type.IsClass && type != typeof (string) && type != typeof(object)) 
       { 
        GetTypeFields(fi); 
       } 
      } 
     } 
    } 

有人可以幫忙嗎?

+3

提示:'fi'不是字段的值。你甚至使用'fi.GetValue(data)'五行! –

回答

1

你非常接近。在第二次通話中,您需要撥打GetTypeFields(fi.GetValue(data))。目前,您正在向第二個調用提供FieldInfo對象,而不是實際的類對象。

+1

你也非常接近;) – Sayse

+0

謝謝,它確實有幫助)) – Felas