假设您有一个Employee这样的基本类:
class Employee { public string Name; public int Years; public string Department; } 然后(在一个单独的类中)我有以下代码片段(我想我理解除了最后一个之外的所有内容):
我相信以下代码片段会起作用,因为数组初始化器创建了一个Employee对象数组,该对象与分配给其的workforce变量的类型相同。
Employee[] workforceOne = new Employee[] { new Employee() { Name = "David", Years = 0, Department = "software" }, new Employee() { Name = "Dexter", Years = 3, Department = "software" }, new Employee() { Name = "Paul", Years = 4, Department = "software" } }; 然后,我有以下代码片段。我相信这是可行的,因为Employee隐式对象数组是Array()类的实现,该类实现了IEnumerable。因此,我相信这就是为什么可以将数组分配给IEnumerable的原因?
IEnumerable workforceTwo = new Employee[] { new Employee() { Name = "David", Years = 0, Department = "software" }, new Employee() { Name = "Dexter", Years = 3, Department = "software" }, new Employee() { Name = "Paul", Years = 4, Department = "software" } }; 然后我有这个代码片段:
IEnumerable workforceThree = new Employee[] { new Employee() { Name = "David", Years = 0, Department = "software" }, new Employee() { Name = "Dexter", Years = 3, Department = "software" }, new Employee() { Name = "Paul", Years = 4, Department = "software" } }; 我不确定为什么此代码片段有效? IEnumerable 继承自IEnumerable(并重写(或重载?)GetEnumerator()方法),但因此我是否不应该需要强制转换才能使上述工作像这样:
//The cast does work but is not required IEnumerable workforceFour = (IEnumerable )new Employee[] { new Employee() { Name = "David", Years = 0, Department = "software" }, new Employee() { Name = "Dexter", Years = 3, Department = "software" }, new Employee() { Name = "Paul", Years = 4, Department = "software" } }; 数组似乎是从类型隐式向下转换的IEnumerable,IEnumerable 但是我一直想,当您需要将类型转换为更具体的类型时,需要显式转换。
也许我在这里缺少我所理解的一些简单信息,但是有人可以帮助我进行有关此方面的理解。
谢谢。 问题来源于stack overflow
从文档中:
在.NET Framework 2.0版,Array类实现System.Collections.Generic.IList ,System.Collections.Generic.ICollection 以及System.Collections.Generic.IEnumerable 通用接口。这些实现是在运行时提供给数组的,因此对于文档构建工具而言是不可见的。因此,通用接口不会出现在Array类的声明语法中,并且没有接口成员的参考主题,这些参考成员只能通过将数组转换为通用接口类型来访问(显式接口实现)。
因此,您的Employee[]工具IEnumerable 。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。