首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C# 反射獲取巢狀物件屬性值完整範例

     編輯:程式設計疑難解答

當需要動態取得物件中巢狀物件(如 RootObject)的所有屬性值時,可透過反射分兩步驟完成:先取得欄位,再遍歷屬性。

核心程式碼

public static void GetProperties(object obj, string memberName)
{
    Type type = obj.GetType();
    FieldInfo field = null;
    if (memberName == "RootObject")
    {
        field = type.GetField("rootObject");
    }
    object subObj = field.GetValue(obj);
    Type subType = subObj.GetType();
    foreach (PropertyInfo prop in subType.GetProperties())
    {
        Console.WriteLine("{0}: {1}", prop.Name, prop.GetValue(subObj, null));
    }
}

步驟解析

  1. type.GetField("rootObject"):取得外層類別中名為 rootObject 的欄位(非屬性)。
  2. field.GetValue(obj):從實例 obj 中取出該欄位的值(即內層物件)。
  3. subType.GetProperties():取得內層物件所有公開屬性。
  4. 迴圈輸出屬性名稱與值。

注意事項

  • 若欄位為 private,需加 BindingFlags.NonPublic | BindingFlags.Instance。
  • 屬性若為索引子或唯讀,GetValue 參數需調整。

此模式適用於任何「物件屬性為另一物件」的動態檢視需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved