【发布时间】:2017-12-18 08:58:19
【问题描述】:
我有一个需要复制的List<dynamic>,然后根据列表行的条件,我需要修改该行的一个字段并将其添加到第二个列表中。
这是代码示例:
//list1 is a `List<dynamic>` that I get from a query using Dapper. I guess it is an ExpandoObject list
var list2 = new List<dynamic>(list1);
foreach (var obj in list2)
{
if (obj.condition == 1)
{
var newObj = obj;
newObj.description = "new row";
list2.Add(newObj);
}
}
我的问题是,在我的两个列表中,列表中的 obj 都使用字符串“新行”进行了更新。
似乎每次我更改 newObj 时,两个列表都会更新。
我也尝试以这种方式创建我的list2,但我遇到了同样的问题:
var list2 = new BindingList<dynamic>(list1);
编辑:
我查看了其他问题,但就我而言,我只有一个 dynamic 列表。无需创建Class 并实现ICloneable,是否可以获得我想要的结果?
【问题讨论】:
-
实现 ICloneable 并可能调用
var list2 = list1.Select(i => i.Clone()).ToList()。 -
但在实现中操作必须编写大致相同的代码
-
好吧,虽然有两个不同的列表,但这些列表中的 elements 是相同的,因此修改一个列表中的任何元素 surley 会将另一个列表中的元素修改为好吧。
-
@SilentRage47 您想克隆该对象,但您无权访问它?好吧,也许您可以使用扩展方法,尽管这可能会变成混乱的反射,具体取决于东西的可见性。
-
如果不了解您的实际对象,就不可能克隆它们。请参阅此处以获取更多说明:stackoverflow.com/questions/12602152/…