我想创建一个对象的新实例 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)
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是否更好?
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)
不,你做不到.请改用以下代码行:
IEnumerable<int> usersIds = new List<int>() {1, 2, 3}.AsEnumerable();
Run Code Online (Sandbox Code Playgroud)
我希望它有所帮助.
| 归档时间: |
|
| 查看次数: |
160910 次 |
| 最近记录: |