如何动态成员名称和值添加到ExpandoObject类的实例?(How to add dynamic

2019-10-22 07:41发布

比方说,存储在阵列成员名单如下图所示,

string[] myMembers = { "ChapterName", "Medium", "LastName", "OrderID" };

我写了下面的代码来生成随机值一起动态类和成员。

var myDynamicClassList = new List<ExpandoObject>();
        foreach (var MemberName in myMembers)
        {
            dynamic dynamicClass = new ExpandoObject();
            dynamicClass.MemberName = new Random().Next();
            myDynamicClassList.Add(dynamicClass);
        }

为了显示上述的输出myDynamicClassList我写下面的代码。

foreach (var x in myDynamicClassList)
        {
            foreach (var property in (IDictionary<String, Object>)x)
            {
                Console.WriteLine(property.Key + ": " + property.Value);
            }
        }

显示这样的输出

成员名称:123465461

成员名称:564613611

成员名称:134654321

成员名称:786451214

而是上面的输出的我期待像下面的输出

CHAPTERNAME:123465461

适用介质:564613611

名字:134654321

订单ID:786451214

这里是我的问题,是有可能在C#中动态成员名称添加到动态类。 如果有可能,请让我知道,如果不是请指导我完成这个工作。

我非常感谢你在先进的帮助。

Answer 1:

如在所描述的类似的问题(“动态添加属性的ExpandoObject”) ,则可以通过使用这样做IDictionary直接:

string[] myMembers = { "ChapterName", "Medium", "LastName", "OrderID" };
var myDynamicClassList = new List<ExpandoObject>();
Random random = new Random();
foreach (var MemberName in myMembers)
{
    IDictionary<string, object> dynamicClass = (IDictionary<string, object>)(new ExpandoObject());
    dynamicClass.Add(MemberName, random.Next());
    myDynamicClassList.Add((ExpandoObject)dynamicClass);
}
foreach (var x in myDynamicClassList)
{
    foreach (var property in (IDictionary<String, Object>)x)
    {
        Console.WriteLine(property.Key + ": " + property.Value);
    }
}

但是,你应该知道的有作为,或在上面链接的文章的评论描述的这种方法可以称为内存限制微软的问题 。 我会重新考虑可能的设计中要考虑什么是真正需要的属性,或者简单地使用Dictionary ,如果它是可行的(避免了动态ExpandoObject完全)。

我也感动您的Random循环外。 创建新实例Random在一个循环内可能不会给你你所期望的结果...



文章来源: How to add dynamic member name and value to an instance of ExpandoObject class?