我想创建一个对象IEnumerable<object>
我可以这样做吗?
IEnumerable<object> a = new IEnumerable<object>();
答案 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
干杯。