如何在c#中循环处理匿名对象

问题描述 投票:0回答:1

我有一个匿名对象,看起来像这样。

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 ; 
    }

我怎样才能显示对象的名称和值?任何帮助或输入是非常感激的,谢谢。

c# foreach anonymous-types
1个回答
0
投票

试试这个就可以了。

    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);
            }
        }
    }

改变它,得到提取格式化的输出。


0
投票

也许你可以尝试用动态?

dynamic permissions = new
    {
        Module1 = new { view = true, delete = true },
        Module2 = new { view = true, delete = true },
    };

permissions.Module1.view ....

0
投票

你可以使用 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
    }

阅读更多关于 System.Reflection 关于 微软文档.

© www.soinside.com 2019 - 2024. All rights reserved.