Java的NoSuchElementException是否存在C#等价物?

时间:2013-09-25 13:14:03

标签: c# exception

Java's NoSuchElementException是否有C#等价物?

3 个答案:

答案 0 :(得分:5)

.NET通常使用InvalidOperationException。你不应该抓住NoSuchElementException,因为它通常表示程序错误。因此,在这个用例中,具体的异常类型并不重要。

不幸的是,InvalidOperationException在许多地方用于许多不同的事情。你经常不能说出来。这是BCL异常层次结构中的一个缺陷。

答案 1 :(得分:3)

在Java中,NoSuchElementException用于表示已达到枚举的结束:

  

nextElement的{​​{1}}方法抛出,表示枚举中没有更多元素。

.NET Framework使用不同的接口,IEnumerator.MoveNext将返回Enumeration,而不是在枚举结束时抛出异常:

  

如果false通过集合的末尾,则枚举数位于集合中的最后一个元素之后,MoveNext返回MoveNext。当枚举数位于此位置时,对false的后续调用也会返回MoveNext

编辑:Rawling正确指出,如果在集合结束后访问false属性,则可能仍会出现问题。在这种情况下,行为不一致。 IEnumerator.Current表示将抛出异常;但是,List<T>.Enumerator.Current表明行为未定义:

  

为了获得更好的性能,如果枚举数位于第一个元素之前或最后一个元素之后,则此属性不会引发异常。该属性的值未定义。

修改 2 :似乎没有等效的例外。在.NET中,您不能忽略枚举器的状态(例如,通过Current方法的返回值标识),否则您将遇到未定义的行为,不可预测地打破了你的申请。

答案 2 :(得分:0)

Linq使用:

[InvalidOperationException]

显示消息:

Sequence contains no elements