首页 新闻 会员 周边 捐助

C#中的问题

0
悬赏园豆:10 [已解决问题] 解决于 2012-08-26 15:32

麻烦高手给我讲讲下面的代码为何能执行:

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函数,接口不是需要具体类来实现的吗?

C#
息壤的主页 息壤 | 菜鸟二级 | 园豆:210
提问于:2012-08-25 23:23
< >
分享
最佳答案
1

其实当你声明一个数组的时候,编译器就隐式地生成了一个Array的实例(当然Array是抽象类),Array实现了IEnumerable接口,当然了,这样子引用就没有问题喽……

收获园豆:8
需要格局 | 老鸟四级 |园豆:2145 | 2012-08-26 10:02

请问,既然我的数组实现了IEnumerable接口,这个整型数组sNum为什么不能直接使用Where方法?感谢了。

息壤 | 园豆:210 (菜鸟二级) | 2012-08-26 15:00

你说的是对的,谢谢!

息壤 | 园豆:210 (菜鸟二级) | 2012-08-26 15:31
其他回答(2)
0
你声明了一个int数组,将它赋给整形的泛型集合,存在一个隐士转换。反省集合中自带where扩展。
收获园豆:1
西安-DB | 园豆:4 (初学一级) | 2012-08-25 23:32

隐士转换!这么说theNum变成了一个实现了IEnumerable接口的新集合。可以这样理解吗?

支持(0) 反对(0) 息壤 | 园豆:210 (菜鸟二级) | 2012-08-25 23:38

@息壤: 对的,可以这样了解。具体你还需要了解一下IEnumerable 接口的迭代。实现了 IEnumerable 接口的对象具有IEnumerable所具有的特性,包括 迭代(.where).再详细的你也参考msdn

支持(0) 反对(0) 西安-DB | 园豆:4 (初学一级) | 2012-08-26 10:51
0

这个是隐式转换,反过来转换才需要强制

这里面的IEnumerable<int>不是接口,可以参考

http://msdn.microsoft.com/zh-cn/library/ckzcawb8

收获园豆:1
田林九村 | 园豆:2367 (老鸟四级) | 2012-08-26 00:00

不是接口?有点糊涂了,麻烦您多解释一下吗?

支持(0) 反对(0) 息壤 | 园豆:210 (菜鸟二级) | 2012-08-26 09:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册