C# IEnumerable<;对象>;a=新的IEnumerable<;对象>;(); 我能做这个吗?
我想创建一个对象的新实例C# IEnumerable<;对象>;a=新的IEnumerable<;对象>;(); 我能做这个吗?,c#,C#,我想创建一个对象的新实例IEnumerable 我能做这个吗 IEnumerable<object> a = new IEnumerable<object>(); IEnumerable a=新的IEnumerable(); 例如,您可以创建列表的实例,该实例实现了IEnumerable。例如: List<object> list = new List<object>(); list.Add(1); list.Add(4); list.Add(5
IEnumerable
我能做这个吗
IEnumerable<object> a = new IEnumerable<object>();
IEnumerable a=新的IEnumerable();
例如,您可以创建列表的实例,该实例实现了IEnumerable
。例如:
List<object> list = new List<object>();
list.Add(1);
list.Add(4);
list.Add(5);
IEnumerable<object> en = list;
CallFunction(en);
List List=新列表();
增加第(1)款;
增加(4);
增加(5);
IEnumerable en=列表;
调用函数(en);
不行,因为IEnumerable
是一个接口
您应该能够创建大多数实现IEnumerable
的非接口类型的空实例,例如:-
IEnumerable<object> a = new object[] { };
IEnumerable a=新对象[]{};
或
IEnumerable a=新列表();
没有IEnumerable是接口,您不能创建接口的实例
你可以这样做
IEnumerable<object> a = new object[0];
IEnumerable a=新对象[0];
既然您现在指定要添加到它,那么您想要的不是一个简单的IEnumerable
,而是至少一个ICollection
。我建议简单地使用如下列表
:
List<object> myList=new List<object>();
myList.Add(1);
myList.Add(2);
myList.Add(3);
另一种实现IEnumerable
的常用方法是C#3中引入的:
IEnumerable MyIterator()
{
收益率1;
收益率2;
收益率3;
}
IEnumerable e4=MyIterator();
我想创建一个新的可枚举对象或列表,并能够添加到其中
这个评论改变了一切。无法添加到通用IEnumerable
。如果您想继续使用System.Collections.Generic
中的接口,则需要使用实现ICollection
的类,如List
:
返回具有指定类型参数的空IEnumerable
IEnumerable a=Enumerable.Empty();
这上面有一条线索:
如果使用空数组或空列表,则这些对象存储在内存中。垃圾收集器必须照顾它们。如果您正在处理一个高吞吐量的应用程序,它可能会产生显著的影响
Enumerable.Empty
不会为每次调用创建对象,从而减少GC的负载
主要原因是我们无法创建接口的对象,而IEnumerable是一个接口。
我们需要创建实现接口的类的对象。这是我们无法直接创建IEnumerable对象的主要原因。不,您不能这样做。请改用以下代码行:
IEnumerable<int> usersIds = new List<int>() {1, 2, 3}.AsEnumerable();
IEnumerable usersIds=new List(){1,2,3}.AsEnumerable();
我希望有帮助。您可以这样做:
IEnumerable<object> list = new List<object>(){1, 4, 5}.AsEnumerable();
CallFunction(list);
IEnumerable list=new list(){1,4,5}.AsEnumerable();
调用函数(列表);
这是一个相当古老的问题,但为了新手的利益,这就是我们如何保护IEnumerable
免受空异常的影响。换句话说,创建类型为IEnumerable
public IEnumerable MyPropertyName{get;set;}=Enumerable.Empty();
干杯。相关:请澄清您的问题。这行代码无法编译,我相信您已经发现了这一点。如果你能给我们更多关于你真正想要达到的目标的信息,那将有助于我们回答你。@Wingman 20-10:好吧,这改变了一切。无法添加到通用IEnumerable
。您必须使用类似于List
的东西。在这种情况下,您需要一个具体的数组List objs=new IEnumerable。无法将项添加到迭代器,因为它不是集合。。。它是一个迭代器:)@ivo:请注意,IEnumerable
并不表示迭代器-它表示一个iterable序列IEnumerator
本身表示迭代器。鉴于问题显示了泛型的使用,给定一个未实现泛型IEnumerable
的类型示例,在我看来是个坏主意。使用CallFunction(list.AsEnumerable())而不是IEnumerable en=list;有任何问题吗;。。。如果可能的话,我会使用带有文字初始值设定项的数组,它是.NET中最有效、最轻量级的可枚举类型,并且没有列表的开销。仅当您确实需要或希望在初始化后进行更改时,才应使用列表。另外,最好在数组或列表中添加System.Linq和invoke.AsEnumerable()。@AdamRalph:我投了反对票,然后分心了,所以不能立即留下评论。接口是类型,所以您的答案是危险的错误,因为它传播了一种常见的误解。有可能创建像@Jon Skeet这样的COM接口实例吗?绝对有可能。奇怪,但却是真的。请参阅,我认为可以指定一个实例化的默认实现,而不是COM接口的接口。@JonSkeet说调用new SomeComInterface()
实例化接口的关联“CoClass”不是更准确吗而不是实例化接口本身?@phoog:这是正确的-但重要而奇怪的是,在某些情况下,你可以对接口使用new
。最干净的答案!
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<object> MyIterator()
{
yield return 1;
yield return 2;
yield return 3;
}
IEnumerable<object> e4=MyIterator();
IEnumerable<object> a = Enumerable.Empty<object>();
IEnumerable<int> usersIds = new List<int>() {1, 2, 3}.AsEnumerable();
IEnumerable<object> list = new List<object>(){1, 4, 5}.AsEnumerable();
CallFunction(list);
public IEnumerable<T> MyPropertyName { get; set; } = Enumerable.Empty<T>();