IEnumerable <object> a = new IEnumerable <object>(); 我可以这样做吗?

Win*_*-10 82 c#

我想创建一个对象的新实例 IEnumerable<object>

我可以这样做吗?

IEnumerable<object> a = new IEnumerable<object>();
Run Code Online (Sandbox Code Playgroud)

Ste*_*tze 97

例如,您可以创建一个实例List<object>,它实现IEnumerable<object>.例:

List<object> list = new List<object>();
list.Add(1);
list.Add(4);
list.Add(5);

IEnumerable<object> en = list;
CallFunction(en);
Run Code Online (Sandbox Code Playgroud)

  • 鉴于问题显示了泛型的使用,给出一个不实现泛型`IEnumerable <T>`的类型的例子是一个坏主意IMO. (10认同)

Cod*_*aos 33

既然你现在指定要添加它,你想要的不是简单IEnumerable<T>但至少是一个ICollection<T>.我建议只使用List<T>这样的:

List<object> myList=new List<object>();
myList.Add(1);
myList.Add(2);
myList.Add(3);
Run Code Online (Sandbox Code Playgroud)

IEnumerable<object>List<object>实现开始,您可以在任何地方使用myList IEnumerable<object>.

(澄清之前的旧答案)

你不能创建一个实例,IEnumerable<T>因为它是一个普通的接口(有时可能指定一个默认的实现,但通常只用于COM).

所以你真正想要的是实例化一个实现接口.行为取决于您选择的班级. IEnumerable<T>

对于空序列使用:

IEnumerable<object> e0=Enumerable.Empty<object>();
Run Code Online (Sandbox Code Playgroud)

对于非空的可枚举,您可以使用一些实现的集合IEnumerable<T>.常见的选择是数组T[],List<T>或者如果你想要不变性ReadOnlyCollection<T>.

IEnumerable<object> e1=new object[]{1,2,3};
IEnumerable<object> e2=new List<object>(){1,2,3};
IEnumerable<object> e3=new ReadOnlyCollection(new object[]{1,2,3});
Run Code Online (Sandbox Code Playgroud)

另一种常见的实现方式IEnumerable<T>是C#3中引入的迭代器功能:

IEnumerable<object> MyIterator()
{
  yield return 1;
  yield return 2;
  yield return 3;
}

IEnumerable<object> e4=MyIterator();
Run Code Online (Sandbox Code Playgroud)


alo*_*ica 24

另一种解决方案是使用Empty.

IEnumerable<object> a = Enumerable.Empty<object>();
Run Code Online (Sandbox Code Playgroud)

在SO上有一个关于它的线程:使用Enumerable.Empty()而不是新的List初始化IEnumerable是否更好?

  • 最干净的答案! (2认同)

Ada*_*lph 21

不,你不能,因为IEnumerable是一个界面.

您应该能够创建大多数非接口类型的空实例IEnumerable,例如: -

IEnumerable<object> a = new object[] { };
Run Code Online (Sandbox Code Playgroud)

要么

IEnumerable<object> a = new List<object>();
Run Code Online (Sandbox Code Playgroud)


Ric*_*ves 7

不,你做不到.请改用以下代码行:

IEnumerable<int> usersIds = new List<int>() {1, 2, 3}.AsEnumerable();
Run Code Online (Sandbox Code Playgroud)

我希望它有所帮助.