将单个元素添加到IEnumerable集合的最佳方法是什么?

Dan*_*don 11 .net c# ienumerable

我很惊讶地发现似乎没有一种方法可以将单个元素添加到IEnumerable集合中.

如何将单个元素添加到IEnumerable集合中?

jon*_*nii 24

你无法真正向IEnumerable添加元素,因为它应该是只读的.你最好的选择是:

return new List<Foo>(enumerable){ new Foo() };
Run Code Online (Sandbox Code Playgroud)

要么

return enumerable.Concat(new [] { new Foo() });
Run Code Online (Sandbox Code Playgroud)


BFr*_*ree 20

IEnumerable的观点是它是一个只读拉式样式集合.如果需要,可以通过执行以下操作来模拟添加:

public static IEnumerable<T> Add<T>(this IEnumerable<T> source, T additionalItem)
{
   foreach(var item in source)
   {
      yield return item;
   }

   yield return additionalItem;
}
Run Code Online (Sandbox Code Playgroud)

  • "追加"甚至更好.Concat感觉喜欢加入类似的东西,而Add/Append感觉就像补充一些东西(虽然Add感觉不那么懒).. (3认同)
  • 我谦卑地建议命名这个方法"Concat",因为我觉得它比"Add"更好地传达了方法的意图,"Add"在处理集合时具有非常强的意义. (2认同)

Lei*_*h S 7

我想在这里指出一些其他答案,IEnumerable不是一个只读集合,它根本不是一个集合.它是一个定义如何迭代集合的接口.

如果要添加对象,则应将对象添加到具体集合类中,或者至少使用不同的接口.


R. *_*des 6

您可以将它与单例数组连接:

IEnumerable xs;
xs.Concat(new[]{x});
Run Code Online (Sandbox Code Playgroud)