c# – IEnumerator.Current和IEnumerator.Current的异常抛出行为
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – IEnumerator.Current和IEnumerator.Current的异常抛出行为,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含858字,纯文字阅读大概需要2分钟。
内容图文
![c# – IEnumerator.Current和IEnumerator.Current的异常抛出行为](/upload/InfoBanner/zyjiaocheng/786/04f2c511de3e487ebee42a2bd8fa10d0.jpg)
我通过调用IEnumerable< T> .GetEnumerator()得到了一个枚举器,然后我调用它的MoveNext()直到它返回false,然后访问它的Current属性.令我惊讶的是,没有例外被抛出.
挖掘MSDN,我发现非通用版本为will throw if Current is accessed after MoveNext() returned false,而通用版本为will not.
有人可以解释这种差异吗?
解决方法:
通用枚举器的行为是未定义的,任何事情都是可能的,最终由集合类型来定义未定义的含义.
但除了抛出之外,他们可以做一些合理的事情,通用枚举器知道集合对象的类型.所以他们可以返回默认值(T).
非通用枚举器没有那么奢侈,它们只能返回null或new object().事实上,ArrayList具有为此目的保留静态对象的代码.但实际上并没有使用它,看起来他们在可用性测试后改变了主意.返回任何一个都会使客户端代码失败并出现非常令人不快的异常,NullReferenceException或InvalidCastException.在这些集合的正常使用中也可以引发异常,因此对于事故的实际原因几乎没有暗示.所以他们没有,他们会抛出InvalidOperationException.
内容总结
以上是互联网集市为您收集整理的c# – IEnumerator.Current和IEnumerator.Current的异常抛出行为全部内容,希望文章能够帮你解决c# – IEnumerator.Current和IEnumerator.Current的异常抛出行为所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。