回答(13)
2 years ago
你不能,因为 IEnumerable 不一定代表可以添加项目的集合 . 事实上,它并不一定代表一个集合!例如:
IEnumerable ReadLines()
{
string s;
do
{
s = Console.ReadLine();
yield return s;
} while (s != "");
}
IEnumerable lines = ReadLines();
lines.Add("foo") // so what is this supposed to do??
但是,您可以创建一个新的 IEnumerable 对象(未指定类型),当枚举时,它将提供旧项目的所有项目,以及您自己的一些项目 . 你使用 Enumerable.Concat :
items = items.Concat(new[] { "foo" });
这不会更改数组对象(无论如何都不能将项插入到数组中) . 但它会创建一个新对象,列出数组中的所有项目,然后"Foo" . 此外,该新对象将跟踪数组中的更改(即,只要您枚举它,您将看到项的当前值) .
2 years ago
IEnumerable 类型不支持此类操作 . IEnumerable 界面的目的是允许消费者查看集合的内容 . 不要修改值 .
当您执行.ToList() . Add()等操作时,您将创建一个新的 List 并向该列表添加一个值 . 它与原始列表没有任何关联 .
您可以使用添加扩展方法创建具有附加值的新 IEnumerable .
items = items.Add("msg2");
即使在这种情况下,它也不会修改原始的 IEnumera