簡體   English   中英

如何在 c# 中循環匿名 object

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM