C#的foreach可以遍历不继承IEnumerable接口的集合?
msdn文档以及我手头的C#参考资料都说foreach遍历实现了IEnumerable的集合,但测试之后发现只要集合类中有GetEnumerator方法,即使集合类不写明继承于IEnumerable也可以用foreach遍历,例如创建了如下的test类之后
这样的代码
是可以编译通过的(当然运行的时候会报NotImplementedException),不会造成什么安全隐患吗?而且foreach不检查有没有:IEnumerable是否和面向对象相悖?
class test<T> //没有写继承于IEnumerable
{
public IEnumerator<T> GetEnumerator()
{
throw new NotImplementedException();
}
}
test<int> kiddingMe = new test<int>();
foreach (int item in kiddingMe)
{
}
更多回答
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Array : ICloneable, IList, ICollection,
IEnumerable, IStructuralComparable, IStructuralEquatable