使用 IEnumerable<T> 在 .net core 中添加对象的实例

Posted

技术标签:

【中文标题】使用 IEnumerable<T> 在 .net core 中添加对象的实例【英文标题】:Using IEnumerable<T> to add instances of an object in .net core 【发布时间】:2020-10-22 07:50:58 【问题描述】:

我需要向 IEnumerable 添加一个对象,但不能 100% 确定如何去做。看来 .add 在我的 .net core 3.1 代码中对我不起作用。

第一堂课是这样的:

 public class ContainerA

    public string TestA  get; set; 

    public IEnumerable<ContainerB> Containers  get; set; 

然后是ContainerB类:

public class ContainerB

    public string TextString  get; set; 

我不确定如何将一堆对象ContainerB的Continer添加到ContainerA的实例对象中,如下所示:

var contA = new ContainerA();

contA.TestA = "works fine";

// Issues here and how to get lots of ContainerB.TestString into the contA instance.

感谢您的帮助。

【问题讨论】:

使用.Concat.Append 扩展方法。 完全重复的How can I add an item to a IEnumerable<T> collection? 以及Adding an item to IEnumerable 【参考方案1】:

IEnumerable 不支持添加,如果你想添加你可以使用IListICollectionContainers 属性类型。如果您想坚持使用IEnumerable - 您可以通过Concat 创建新的(或Append 添加单个元素)并将其分配给Containers

IEnumerable<ContainerB> toAdd = ...; //  lots of ContainerB.TestString
contA.Containers = contA.Containers
    .Concat(toAdd);

【讨论】:

@cdub 我认为他们可能已经在 .NET Core 中解决了这个问题,但至少在 .NET Framework 中,以这种方式使用 IList 时要小心。它应该工作...但至少在 .NET Framework 中,数组实现了IList,但是如果您使用IList.Add 之类的东西,它们会抛出异常。这并不意味着不应以这种方式使用IList;它应该。请注意它不是由数组实现的,因为设计决策是在很久以前做出的。

以上是关于使用 IEnumerable<T> 在 .net core 中添加对象的实例的主要内容,如果未能解决你的问题,请参考以下文章

将 IEnumerable<Ienumerable<T>> 转换为 Dictionary<key,IEnumerable<T>>

使用 IEnumerable<T> 在 .net core 中添加对象的实例

如何将两个 IEnumerable<T> 连接成一个新的 IEnumerable<T>?

如何在 C# 中将 IEnumerable<T> 转换为 List<T>?

对参数使用 IReadOnlyCollection<T> 而不是 IEnumerable<T> 以避免可能的多次枚举

在 C# 中将多个 IEnumerable<T> 提要混合为一个