【发布时间】:2020-05-07 13:03:13
【问题描述】:
谁能解释一下:
- 编译成功
- 运行时 KO
我已经检查了 IEnumerable 和 IEnumerable 的源代码,但一无所获 仅供参考,这不适用于列表
class Program
{
public class Person
{
public long Age { get; set; }
}
static void Main(string[] args)
{
IEnumerable<Person> list = new List<Person>();
((Person)list).Age = 5;
}
}
【问题讨论】:
-
List<Person>和IEnumerable<Person>是人员的集合。Person是一个人。你不能把一群人变成一个人。 -
此外,即使可能,如代码中所写,列表也不包含元素。哪一个会收到 Age 属性的值 5?
-
IEnumerable<Person> list是 零个或多个项的集合。如果你想要一个单个项目,你应该指定哪一个,例如list.First().Age = 5;如果要修改集合中的所有项目,则必须循环:foreach (var item in list) item.Age = 5; -
@sofienereghima 演员表是运行时断言。您向编译器承诺
list是Person通过进行强制转换,即使编译器认为它知道不同。然后编译器关闭并编译您的代码,而在运行时失败。
标签: c# ienumerable implicit-conversion explicit-conversion