假设存储在如下数组中的成员名列表
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#中为动态类添加动态成员名称。如果有可能请告诉我,如果没有,请指导我完成这项工作。
我非常感谢你提前帮助。
答案 0 :(得分:1)
如similar question ("Dynamically adding properties to an 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);
}
}
但是,您应该了解此方法可能存在的已知内存限制,如上面链接的帖子的评论或Microsoft issue中所述。我可能会重新考虑设计,以考虑实际需要哪些属性,或者只使用Dictionary
(如果可行)(完全避免动态ExpandoObject
)。
我还将你的Random
移到了循环之外。 Creating new instances of Random
inside a loop may not give you the results you expect...