List< dynamic>().添加问题c#
本文关键字:添加 问题 dynamic List | 更新日期: 2023-09-27 18:01:35
当我循环进入List时,我总是看到列表中所有项的值相同。
我哪里错了?
这是我所做的。
var DyObjectsList = new List<dynamic>;
dynamic DyObj = new ExpandoObject();
if (condition1)
{ DyObj.Required = true;
DyObj.Message = "Message 1";
DyObjectsList.Add(DyObj); }
if (condition2)
{ DyObj.Required = false;
DyObj.Message = "Message 2";
DyObjectsList.Add(DyObj);
}
……
有趣的是,DyObjectsList中的所有项都被替换为最后一个分配对象的值。
您需要在if
语句体中实例化一个新实例(否则您将重复修改/添加对同一实例的引用):
if (condition1) {
dynamic DyObj = new ExpandoObject();
DyObj.Required = true;
DyObj.Message = "Message 1";
DyObjectsList.Add(DyObj); }
if (condition2) {
dynamic DyObj = new ExpandoObject();
DyObj.Required = false;
DyObj.Message = "Message 2";
DyObjectsList.Add(DyObj);
}
当然,更好的方法是:
if(condition1) {
dynamic obj = GetNewDynamicObject(false, "Message 1");
DyObjectsList.Add(obj);
}
if(condition2) {
dynamic obj = GetNewDynamicObject(true, "Message 2");
DyObjectsList.Add(obj);
}
其中GetNewDynamicObject
的定义很明显
你添加了同一个对象两次,并在中间改变了它的属性。
每次添加一个new ExpandoObject()
当两个条件都为真时,变量将被设置为最后一个if块中的值。你可能应该使用else if而不是第二个if块。