[英]How to loop through anonymous object in c#
我有匿名的 object 看起來像這樣:
var permissions = new
{
Module1 = new { view = true, delete = true },
Module2 = new { view = true, delete = true },
};
我嘗試使用下面的代碼,但沒有按預期工作
foreach (var kp in permissions.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
var obj = kp.GetValue(Permissions, null);
var prop = kp.Name + ",View Mode:" + obj.view ;
}
如何顯示 object 名稱和值? 非常感謝任何幫助或輸入,謝謝
試試這個它會工作。
static void Test()
{
var permissions = new
{
Module1 = new { view = false, delete = true },
Module2 = new { view = true, delete = true },
};
foreach(var kp in permissions.GetType().GetTypeInfo().DeclaredProperties)
{
var obj = kp.GetValue(permissions);
var objectType = obj.GetType().GetTypeInfo();
foreach (var item in objectType.DeclaredProperties)
{
var prop = kp.Name + ",view mode: " + item.GetValue(obj);
}
}
}
更改它,以獲取提取格式的 output。
也許您可以嘗試使用動態?
dynamic permissions = new
{
Module1 = new { view = true, delete = true },
Module2 = new { view = true, delete = true },
};
permissions.Module1.view ....
您可以為其使用System.Reflection
命名空間,其中包含通過檢查元數據來檢索托管代碼中的程序集、模塊、成員、參數和其他實體的信息的類型。
以下是使用此命名空間迭代匿名 obj 的方法:
var permissions = new
{
Module1 = new { view = true, delete = true },
Module2 = new { view = true, delete = true },
};
foreach(var p in permissions.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
dynamic objValue = p.GetValue(permissions, null);
Console.WriteLine("Key {0}", ": " + p.Name); //prints obj name
Console.WriteLine("View {0}", ": " + objValue.view); //prints 'view' parameter's value of obj
Console.WriteLine("Delete {0}", ": " + objValue.delete + "\n"); //prints 'delete' parameter's value of obj
}
在microsoft docs上閱讀有關System.Reflection
的更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.