A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 张可 中级黑马   /  2012-8-12 19:02  /  1713 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

foreach中能用泛型么?迭代自己定义的对象。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

2 个回复

倒序浏览
可以的泛型也就是强类型。
如:List<string> mylist=new List<string>
List<int> mylist=new List<int>
也可以是一个类
List<类A> mylist=new List<类A>

用foreach获取就可以了。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
在.NET中  只有实现了IEnumerator 和 IEnumerable 两个接口的类型才能使用foreach进行迭代.
其原因是: 编译器 在将foreach 编译成MSIL语言之前 会将我们的foreach代码编译成下面的这种形式
//我们写的原始的代码
int[] intArr = [1,2,3,4,5,6,7];
foreach(int i in intArr)
{
    Console.WriteLine(i);
}
//编译器转换过后的代码(请注意 ,我这里说的是转换 而不是编译.编译是指将C#编译成MSIL)
IEnumerator enum = intArr.GetEnumerator();
while(enum.MoveNext())
{
    Console.WriteLine(i);
}

//它调用了 int数组集合的GetEnumerator方法. 并返回了一个 IEnumerator 类型的接口对象.
这里面还有很多细节.我赘述了.

数组和集和 之后能使用 foreach进行迭代 是因为 它们已经默认实现了 IEnumerator 和 IEnumerable 接口.

如果你想让自己的类型也能使用foreach进行迭代 ,那么也需要实现这两个接口.(姑且这么认为吧/.)


评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马