列出<dynamic>()。添加问题C#</dynamic>

时间:2011-07-06 18:36:29

标签: c#

当我循环进入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中的所有项都被最后分配的对象的值替换。

3 个答案:

答案 0 :(得分:9)

您需要在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的定义很明显。

答案 1 :(得分:4)

您要添加两次相同的对象,并在中间更改其属性。

您每次都需要添加new ExpandoObject()

答案 2 :(得分:0)

当两个条件都为真时,变量将设置为最后一个if块。你应该使用else if而不是second if。