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

时间:2011-01-05 16:19:44

标签: c#

我想创建一个对象IEnumerable<object>

的新实例

我可以这样做吗?

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

10 个答案:

答案 0 :(得分:85)

您可以创建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);

答案 1 :(得分:31)

由于您现在已指定要添加,因此您想要的不是简单的IEnumerable<T>,而是至少ICollection<T>。我建议只使用这样的List<T>

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

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

(澄清之前的旧答案)

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

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

对于空序列使用:

IEnumerable<T>

对于非空的可枚举,您可以使用一些实现IEnumerable<object> e0=Enumerable.Empty<object>(); 的集合。常见的选择是数组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}); 的另一种常见方法是在C#3中引入iterator feature

IEnumerable<T>

答案 2 :(得分:21)

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

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

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

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

答案 3 :(得分:19)

另一种解决方案是使用Empty

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

有一个关于它的帖子:Is it better to use Enumerable.Empty() as opposed to new List to initialize an IEnumerable?

答案 4 :(得分:7)

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

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

我希望它有所帮助。

答案 5 :(得分:1)

  

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

这条评论会改变一切。您无法添加到通用IEnumerable<T>。如果您想继续使用System.Collections.Generic中的接口,则需要使用实现ICollection<T>的类List<T>

答案 6 :(得分:1)

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

答案 7 :(得分:1)

您可以这样做:

IEnumerable<object> list = new List<object>(){1, 4, 5}.AsEnumerable();
CallFunction(list);

答案 8 :(得分:0)

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

你可以做这样的事情

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

答案 9 :(得分:0)

这是一个很老的问题,但是对于新手来说,这就是我们如何保护public class JsonTypeHandler : SqlMapper.ITypeHandler { public void SetValue(IDbDataParameter parameter, object value) { parameter.Value = JsonConvert.SerializeObject(value); } public object Parse(Type destinationType, object value) { return JsonConvert.DeserializeObject(value as string, destinationType); } } SqlMapper.AddTypeHandler(typeof(int[]), new JsonTypeHandler()); 不受IEnumerable<T>的侵害。换句话说,创建类型为null exception

的变量的空实例
IEnumerable<T>

https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.empty?view=net-5.0

干杯。