IEnumerable
にインデックスを付けると、範囲外のインデックスを使用するとデフォルト値が返されることに気付きました。私はArgumentOutOfRangeException
を受け取ると予想されます。たとえば、このコードではlistItem
が0になります。例外はスローされません。IEnumerableにインデックスを付けるときに使用する拡張方法
Dim list As IEnumerable = New List(Of Integer)({1, 2, 3})
Dim listItem As Integer = CInt(list(-1))
私はIList
としてキャストした場合、予想通り、私はArgumentOutOfRangeException
を取得します。
このコードは例外をスローします。
Dim list As IList = New List(Of Integer)({1, 2, 3})
Dim listItem As Integer = CInt(list(-1))
私がIEnumerable
にインデックスを付けることはそれ自体が驚くべきことです。私はそれがLinq
拡張を使用していると確信していますが、私は使用中であることがわかりません。この現象は、ElementAtOrDefaultメソッドが使用されていることを示していますが、これをサポートするためのドキュメントが見つかりません。
ここでは何が起こっていますか?実際にどの方法が使用されているかを知る良い方法はありますか?
ここで、より正式な説明を見つけました[IList(Of Key)を実装していない場合でもKeyCollection/ValueCollectionの項目にインデックスでアクセスできるのはなぜですか?](http://stackoverflow.com/questions/36933428) /私がアクセスできる - アイテム内のキーコレクション - 値によるコレクション - インデックス - それが妥当かどうか) – sstan