如何在C#中向IEnumerable添加元素?

时间:2013-06-21 16:05:09

标签: c# ienumerable

我有以下代码:

      var contentTypes =
          (
              from contentType in this._contentTypeService.GetContentTypes()
              select new
              {
                  id = contentType.ContentTypeId,
                  name = contentType.Name
              }
          );

如何在id为99且名称为“All”的contentTypes中添加其他元素?

我试图使用contentTypes.Add(

但智能感知似乎不允许这样做。

5 个答案:

答案 0 :(得分:2)

您无法添加IEnumerable<T>IEnumerable<T>代表你可以迭代的序列;它们不代表您可以添加的集合。你可以做的是concatenate到你的序列的末尾,获得一个新的序列:

var sequence = contentTypes.Concat(
                   new[] {
                       new { id = 99, name = "All" }
                   }
               );

现在,如果您对sequence进行迭代,您将首先看到流向您的contentTypes元素,然后最后一项将是附加项new { id = 99, name = "All" }

答案 1 :(得分:1)

您可以将新值连接到IEnumerable&lt;&gt;的末尾。

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

结束

答案 2 :(得分:0)

如果您使用contentTypes.ToList(),则可以添加到该列表,但这样做会创建一个集合的新实例,因此您实际上并未修改源集合。

答案 3 :(得分:0)

试试这个 -

var contentTypes =
          (
              from contentType in this._contentTypeService.GetContentTypes()
              select new
              {
                  id = contentType.ContentTypeId,
                  name = contentType.Name
              }
          ).ToList();

由于您已将contentTypes转换为List,因此应该允许您向其添加新项目。

答案 4 :(得分:0)

首先,您无法在IList.Add上使用IEnumerable<T>。所以你需要创建一个新的集合。

您选择的是匿名类型,请使用Concat为查询添加固定的anynymous类型:

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