C# 为什么IEnumerable不等同于list

C# 为什么IEnumerable不等同于list,c#,C#,当我写这段代码时,它允许我 IEnumerable<object> creator = new List<string>(); IEnumerable creator=new List(); 但是当我写作的时候 IEnumerable<object> creator = new List<int>(); IEnumerable creator=new List(); 它显示编译时错误: 错误CS0266无法隐式转换类型 “System.Co

当我写这段代码时,它允许我

IEnumerable<object> creator = new List<string>();
IEnumerable creator=new List();
但是当我写作的时候

IEnumerable<object> creator = new List<int>();
IEnumerable creator=new List();
它显示编译时错误:

错误CS0266无法隐式转换类型 “System.Collections.Generic.List”到 'System.Collections.Generic.IEnumerable'。明确的 存在转换(您是否缺少演员阵容?)


我不知道为什么会这样。我相信这是因为int是一种值类型。虽然int最终从object继承,但int不能从继承; 您可以将其基本类型与以下内容进行比较:

Console.WriteLine(10.GetType().BaseType.Name);
        Console.WriteLine("".GetType().BaseType.Name);

我相信这是因为int是一种值类型。虽然int最终从object继承,但int不能从继承; 您可以将其基本类型与以下内容进行比较:

Console.WriteLine(10.GetType().BaseType.Name);
        Console.WriteLine("".GetType().BaseType.Name);
那是因为

string
是一种引用类型,因此可以正常工作
int
是一种值类型,因此它不是

但是,您可以显式地将列表转换为装箱的
int
s列表:

IEnumerable<object> creator = listOfInts.Select(i => (object)i);
IEnumerable creator=listofits.Select(i=>(object)i);
编辑:

与许多其他答案相反,值类型。这也在文章中提到。这不是值类型保持不变的原因

那是因为

string
是一种引用类型,因此可以正常工作
int
是一种值类型,因此它不是

但是,您可以显式地将列表转换为装箱的
int
s列表:

IEnumerable<object> creator = listOfInts.Select(i => (object)i);
IEnumerable creator=listofits.Select(i=>(object)i);
编辑:


与许多其他答案相反,值类型。这也在文章中提到。这不是值类型保持不变的原因

您可以使用ICollection而不是IEnumerable。对我来说,第一个编译器错误也是!?您可以使用ICollection而不是IEnumerable。对我来说,第一个编译器错误也是!?是的,我确实指出了这一点。但是不能从int继承。“一个结构不能从另一个结构或类继承,它不能作为一个类的基。”是的,我已经指出了这一点。但是不能从int继承。“结构不能从另一个结构或类继承,也不能作为类的基。”