麻烦高手给我讲讲下面的代码为何能执行:
int[] sNum = { 4, 3, 5, 6, 1, 6, 7 };
IEnumerable<int> theNum = sNum;
theNum = theNum.Where( theint => theint==3);
foreach (int item in theNum)
{
Console.WriteLine(item);
}
主要是加红的部分,为什么普通数组没有经过强制转换,就能变成IEnumerable类型,更重要的是,还有了该接口的Where函数,接口不是需要具体类来实现的吗?
其实当你声明一个数组的时候,编译器就隐式地生成了一个Array的实例(当然Array是抽象类),Array实现了IEnumerable接口,当然了,这样子引用就没有问题喽……
请问,既然我的数组实现了IEnumerable接口,这个整型数组sNum为什么不能直接使用Where方法?感谢了。
你说的是对的,谢谢!
隐士转换!这么说theNum变成了一个实现了IEnumerable接口的新集合。可以这样理解吗?
@息壤: 对的,可以这样了解。具体你还需要了解一下IEnumerable 接口的迭代。实现了 IEnumerable 接口的对象具有IEnumerable所具有的特性,包括 迭代(.where).再详细的你也参考msdn
这个是隐式转换,反过来转换才需要强制
这里面的IEnumerable<int>不是接口,可以参考
http://msdn.microsoft.com/zh-cn/library/ckzcawb8
不是接口?有点糊涂了,麻烦您多解释一下吗?