【发布时间】:2016-05-27 20:06:51
【问题描述】:
当索引到IEnumerable 时,我注意到使用超出范围的索引将导致返回默认值。我本来希望收到ArgumentOutOfRangeException。例如,此代码导致listItem 为0。不会引发异常。
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 方法,但我找不到任何文档来支持这一点。
这里发生了什么?有什么好的方法可以确定实际使用了哪些方法?
【问题讨论】: