2017-08-02 106 views
-2

如何使用SubClass1類型處理SuperClass1中的所有字段?如何從嵌套類訪問包含類的字段

這是我到目前爲止有:

namespace ConsoleApplication9 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      SuperClass1.SubClass1 class1 = new SuperClass1.SubClass1(); 
      PrintAllFields(class1); 
     } 

     public static void PrintAllFields(object obj) 
     { 
      var SuperClassType = obj.GetType(); 
      // How do I get the fields 'param1', 'param2', 'param3' from here? 
      SuperClassType.GetFields(); 
     } 
    } 

    public class SuperClass1 
    { 
     public int param1; 
     public int param2; 
     public int param3; 
     public class SubClass1 
     { 
      public int paramTest; 
     } 
    } 
} 

回答

2

你在找什麼叫聲明類型。

你可以看看下面的鏈接瞭解更多信息:MSDN, Declaring Type

您的代碼可以寫成:

public static void PrintAllFields(object obj) 
{ 
    var nestedClassType = obj.GetType(); 
    var declaringClassType = nestedClassType.DeclaringType; 

    if (declaringClassType != null) 
    { 
     var fields = declaringClassType.GetFields(); 
    } 
} 

不要忘記檢查,如果確實有一個聲明類型,因爲否則,您declaringClassType將爲空,您將以NullReferenceException結束。