设置集合和添加方法之间的区别



我有两个列表,我想将其中一个设置为另一个:

var entities = new List<Entity>() { new Entity(), new Entity(), new Entity() };
List<Entity> newCollection = new List<Entity>();

我使用两种方式执行此操作:

1:

newCollection = entities;

阿拉伯数字:

foreach (var entity in entities)
{
    entity.OnDeleted += Entity_Deleted;
    newCollection.Add(entity);
}

有很多方法,但我想使用 foreach,因为我想订阅实体类的事件,然后将其添加到集合中。
我想知道这些方式之间有什么大的区别吗?
使用 foreach 时会遇到性能问题吗?

您可以在实体上附加事件,然后按以下方式将它们添加到另一个列表中:

IList<Entity> copy = entities.Select(entity => {
    entity.OnDeleted += Entity_Deleted;
    return entity;
}).ToList();

您编写的另一种方法(var copy = entities;(只是将对第一个列表的引用复制到新变量,但它仍然是相同的实例。

同样的概念也适用于第一个列表中的所有实体:删除后,这些实体也将在第二个列表中删除,除非您对这些元素进行深层或浅层复制。
如果你有这样的实用程序,你可以通过这样在Select中返回对象来解决问题:

return entity.Copy();

性能不应该是你目前的主要关注点,因为正如评论中所建议的,看起来你错过了一些关键概念,如引用和值类型,对这些东西的了解可能会从根本上改变你的进一步问题。

相关内容

  • 没有找到相关文章