c# - List<dynamic>().添加问题C#

标签 c#

当我循环进入列表时,我总是看到列表中所有项目的相同值。

我哪里错了?

这就是我所做的。

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 的定义很明显。

关于c# - List<dynamic>().添加问题C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6601309/

相关文章:

c# - 如何将具有反斜杠的连接字符串传递给 SqlConnection?

c# - 在 ASP.NET MVC3 中混合 Javascript 和 Razor 时对变量范围感到困惑

c# - 在 C# 中将字符串加密为 URL

c# - 可以在字符类中使用.NET RegEx向后引用来排除以前匹配的字符吗?

c# - 使用 INotifyPropertyChanged 绑定(bind)

c# - 如何在数据列表中获取链接按钮文本和值?

c# - 调试和属性加载

c# - await/async 与 "classic"异步(回调)

C# 反射 : Get *all* active assemblies in a solution?

c# - 在 claim 中搜索