簡體   English   中英

Java的NoSuchElementException是否具有C#等效項?

[英]Is there a C# equivalent for Java's NoSuchElementException?

Java的NoSuchElementException是否具有C#等效項?

.NET通常為此使用InvalidOperationException 無論如何,您都不應捕獲NoSuchElementException ,因為它通常表示程序錯誤。 因此,在此用例中,具體的異常類型無關緊要。

不幸的是, InvalidOperationException在許多地方用於許多不同的事情。 您常常不能從中看出很多。 這是BCL異常層次結構中的一個缺陷。

在Java中, NoSuchElementException用於指示已達到枚舉的末尾:

EnumerationnextElement方法拋出,以指示該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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM