如何在C#中向IEnumerable添加元素
本文关键字:IEnumerable 添加 元素 中向 | 更新日期: 2023-09-27 18:19:29
我有以下代码:
var contentTypes =
(
from contentType in this._contentTypeService.GetContentTypes()
select new
{
id = contentType.ContentTypeId,
name = contentType.Name
}
);
如何向contentTypes添加另一个id为99、名称为"All"的元素?
我试图使用contentTypes.Add(
但智能感知似乎不允许这样做。
您不能添加到IEnumerable<T>
。IEnumerable<T>
s表示可以迭代的序列;它们并不代表你可以添加到的集合。你可以做的是连接到序列的末尾,获得一个新的序列:
var sequence = contentTypes.Concat(
new[] {
new { id = 99, name = "All" }
}
);
现在,如果您对sequence
进行迭代,您将首先看到流式传输给您的contentTypes
的元素,然后最后一项将是附加项new { id = 99, name = "All" }
。
您可以将新值连接到IEnumerable<>的末尾。
var contentTypes =
(
from contentType in new[]{new {ContentTypeId = 1, Name="TEST"}}
select new
{
id = contentType.ContentTypeId,
name = contentType.Name
}
).Concat(new[]{new {id = 99, name="All"}});
生成的IEnumerable将以99/All 结束
如果使用contentTypes.ToList()
,则可以添加到该列表中,但这样做会创建集合的新实例,因此实际上不会修改源集合。
试试这个-
var contentTypes =
(
from contentType in this._contentTypeService.GetContentTypes()
select new
{
id = contentType.ContentTypeId,
name = contentType.Name
}
).ToList();
当您已经将contentTypes转换为List时,它应该允许您向其中添加一个新项目。
首先,不能在IEnumerable<T>
上使用IList.Add
。所以你需要创建一个新的集合。
您正在选择一个匿名类型,请使用Concat
将一个固定的匿名类型添加到您的查询中:
var allTypes = new[]{new { id = 99, name = "All" }}; // creates a fixed anonymous type as `IEnumerable<T>`
var contentTypes = from contentType in this._contentTypeService.GetContentTypes()
select new
{
id = contentType.ContentTypeId,
name = contentType.Name
};
var result = allTypes.Concat(contentTypes).ToList(); // concat