黑马程序员技术交流社区
标题:
foreach疑惑
[打印本页]
作者:
张可
时间:
2012-8-12 19:02
标题:
foreach疑惑
foreach中能用泛型么?迭代自己定义的对象。
作者:
来明坤
时间:
2012-8-12 19:44
可以的泛型也就是强类型。
如:List<string> mylist=new List<string>
List<int> mylist=new List<int>
也可以是一个类
List<类A> mylist=new List<类A>
用foreach获取就可以了。
作者:
dmcnero90
时间:
2012-8-12 23:39
在.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进行迭代 ,那么也需要实现这两个接口.(姑且这么认为吧/.)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2