IEnumerable Option严格的后期绑定问题

时间:2018-07-25 09:56:03

标签: asp.net vb.net

Private Sub EvaluateDistanceBetweenIrregularSpots(irregularWeldspots As IEnumerable)
    For Each spot1 In irregularWeldspots
       spot1.row("XUNIT") Is Nothing Then Continue For...       

spot1.row("XUNIT")的问题为“选项Option On不允许延迟绑定”。

1 个答案:

答案 0 :(得分:1)

您的代码中使用的IEnumerable接口不是通用的,这意味着其中的对象类型是未知的。

当您执行For Each spot1 In irregularWeldspots时,spot1的实际类型是未知的,因此假定为Object类型。类Object中没有“行”属性,所以这就是您收到错误的原因。

有两种方法可以解决该错误。首选方式是使用通用的IEnumerable接口:

Private Sub EvaluateDistanceBetweenIrregularSpots(irregularWeldspots As IEnumerable(Of Spot))
    For Each spot1 In irregularWeldspots
       spot1.row("XUNIT") Is Nothing Then Continue For...

如果您有一个非通用的IEnumerable对象,则可以轻松地将其强制转换为通用的IEnumerable:

Dim irregularWeldspots = enumerableObject.Cast<Spot>()
EvaluateDistanceBetweenIrregularSpots(irregularWeldspots) 'Now it works!

如果由于某种原因而无法执行此操作,则可以始终明确指定spot1变量的类型:

Private Sub EvaluateDistanceBetweenIrregularSpots(irregularWeldspots As IEnumerable)
    For Each spot1 As Spot In irregularWeldspots
       spot1.row("XUNIT") Is Nothing Then Continue For...

您可以用Spot变量的实际类型替换spot1