[英]Is there a C# equivalent for Java's NoSuchElementException?
.NET通常為此使用InvalidOperationException
。 無論如何,您都不應捕獲NoSuchElementException
,因為它通常表示程序錯誤。 因此,在此用例中,具體的異常類型無關緊要。
不幸的是, InvalidOperationException
在許多地方用於許多不同的事情。 您常常不能從中看出很多。 這是BCL異常層次結構中的一個缺陷。
在Java中, NoSuchElementException
用於指示已達到枚舉的末尾:
由
Enumeration
的nextElement
方法拋出,以指示該Enumeration
中沒有更多元素。
.NET Framework使用另一個接口,當到達枚舉結束時, IEnumerator.MoveNext
將返回false
,而不是引發異常:
如果
MoveNext
通過集合的末尾,則枚舉數將位於集合中最后一個元素之后,並且MoveNext
返回false
。 當枚舉數位於此位置時,對MoveNext
后續調用也將返回false
。
編輯 :Rawling正確指出,如果超出集合末尾訪問Current
屬性,仍然可能會出現問題。 在這種情況下,行為不一致。 IEnumerator.Current
聲明將拋出異常; 但是, List<T>.Enumerator.Current
指出該行為是未定義的:
為了獲得更好的性能,如果枚舉數位於第一個元素之前或最后一個元素之后,則此屬性不會引發異常。 該屬性的值是不確定的。
編輯2 :似乎沒有等效的例外。 在.NET中, 您一定不能忽略枚舉器的狀態 (例如,通過MoveNext
方法的返回值來標識),否則您將遇到未定義的行為,這可能會意外中斷應用程序。
Linq使用:
[InvalidOperationException]
隨着消息:
Sequence contains no elements
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.