如何将项添加到IEnumerable

use*_*438 2 c# collections ienumerable

在C#中

IEnumerable<MyModel> test = _blah.tolist();
Run Code Online (Sandbox Code Playgroud)

现在我可以循环测试,但如何添加项目?

请不要告诉我添加项目没有意义,我已经看过那篇文章.

我想知道的是,如果我循环浏览10个项目,我该如何再添加一个项目,以便循环浏览11个项目?

也没有.Add()方法

Jac*_*all 7

使用 LINQ-to-objectConcat构建一个新的对象IEnumerable,迭代第一个对象,然后迭代第二个对象:

IEnumerable<MyModel> test = _blah.tolist();
IEnumerable<MyModel> second = new[] { theItem };
IEnumerable<MyModel> elevenItems = test.Concat(second);
Run Code Online (Sandbox Code Playgroud)


mas*_*son 6

IEnumerable是一个界面.您不能Add()在IEnumerable上使用,因为它们不需要实现Add()方法.请参阅MSDN上IEnumerable文档.

而是创建一个继承自IList接口的通用列表.使用该接口的类型必须实现.IListAdd()

List<MyBlahType> test = _blah.tolist();
test.Add(new MyBlahType());
Run Code Online (Sandbox Code Playgroud)

如果您仍想使用接口来避免具体类型,请IList直接使用.

IList<MyBlahType> test= _blah.tolist();
test.Add(new MyBlahType());
Run Code Online (Sandbox Code Playgroud)

顺便说一下,通常认为使用下划线启动变量/类型名称并且不使用适当的大写字母时样式很差.C#中的首选样式是使用PascalCase或camelCase进行大写.

  • “你通常不会直接使用接口”——嗯,你确实这样做了。当不需要实现松散耦合时,您通常希望避免使用具体类型。 (2认同)