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

IEnumerable<object> a = new IEnumerable<object>(); 

我可以这样做吗? 我只想创build一个新的对象实例。 IEnumerable<object>

你可以例如创build一个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); 

既然你现在指定了要添加到它,你想要的不是一个简单的IEnumerable<T>而是至less一个ICollection<T> 。 我build议使用像这样的List<T>

 List<object> myList=new List<object>(); myList.Add(1); myList.Add(2); myList.Add(3); 

因为List<object>实现了IEnumerable<object> ,所以可以使用myList遍及IEnumerable<object>

(澄清前的旧答案)

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

所以你真正想要的是实例化一个实现接口 IEnumerable<T> 。 行为取决于您select的类别。

对于空序列使用:

 IEnumerable<object> e0=Enumerable.Empty<object>(); 

对于非空的枚举,可以使用一些实现IEnumerable<T>集合。 常见的select是数组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}); 

实现IEnumerable<T>另一个常用方法是在C#3中引入的迭代器特性 :

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

不可以,因为IEnumerable是一个接口。

您应该能够创build一个实现IEnumerable的大多数非接口types的空实例,例如: –

 IEnumerable<object> a = new object[] { }; 

要么

 IEnumerable<object> a = new List<object>(); 

另一个解决scheme是使用Empty

 IEnumerable<object> a = Enumerable.Empty<object>(); 

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

不,你不能这样做。 改用下面这行代码:

 IEnumerable<int> usersIds = new List<int>() {1, 2, 3}.AsEnumerable(); 

我希望它有帮助。

我想创build一个新的枚举对象或列表,并能够添加到它。

这个评论改变了一切。 您不能添加到通用的IEnumerable<T> 。 如果你想留在System.Collections.Generic的接口,你需要使用一个实现ICollection<T>类如List<T>

主要原因是我们不能创build一个接口的对象,IEnumerable是一个接口 。 我们需要创build实现接口的类的对象。 这是我们无法直接创buildIEnumerable对象的主要原因。

没有IEnumerable是一个接口,你不能创build接口的实例

你可以做这样的事情

 IEnumerable<object> a = new object[0];