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];