这是有效的代码:
void func(IEnumerablestrings){ foreach(string s in strings){ Console.WriteLine(s); } } string[] ss = new string[]{"asdf", "fdsa"}; func(ss);
我想知道的是,隐式转换是如何string[] -> IEnumerable
工作的?
来自:msdn数组类
在.NET Framework 2.0版中,Array类实现了
IList
,
ICollection
,和
IEnumerable
通用接口.这些实现在运行时提供给数组,因此文档构建工具不可见.因此,通用接口不会出现在Array类的声明语法中,并且没有可通过将数组转换为通用接口类型(显式接口实现)来访问的接口成员的参考主题.将数组转换为其中一个接口时要注意的关键是添加,插入或删除元素的成员抛出
NotSupportedException
.
Array
class,这是一个非常奇怪的野兽,由编译器和JIT特别对待(更多关于Richter和Don Box的书,我猜),实现IEnumerable
.