Option Strict不允许使用IEnumerable进行后期绑定

时间:2018-07-25 07:08:44

标签: asp.net vb.net

Dim distinctJoints As IEnumerable
distinctJoints = From row In spotsTable.AsEnumerable()
                                        Group row By Key = row("FUNCJOINTCODE") Into Group
                                        Select Key, Group

_evaluatedJointsCount = (From row In spotsTable.AsEnumerable()
                        Group row By Key = row("FUNCJOINTCODE") Into Group
                        Select Key, Group).Count()

'Process each joint
For Each currentJoint In distinctJoints
    Dim currentJointKey As String = currentJoint.Key

对于上面的代码currentJoint.Key,显示在选项strict启用后延迟绑定的错误。 你能帮我这个忙吗?

1 个答案:

答案 0 :(得分:0)

首先,恭喜您将代码移向Option Strict On!起初可能需要做一些工作,但从长远来看是有回报的,因为在编译时而不是在运行时会发现很多错误。

也就是说,让我们看看您的问题。在这里:

Dim distinctJoints As IEnumerable

您将distinctJoints声明为非通用IEnumerable。迭代时,非通用IEnumerable返回类型Object的项目。类型Object不包含Key方法。这就是为什么会出现编译时错误的原因。

由于您的LINQ查询返回的是匿名类型的通用IEnumerable,因此解决方案是改为使用类型推断。在项目属性中激活Option Infer On(如果尚未激活),然后让编译器推断正确的数据类型:

' Dim distinctJoints As IEnumerable <-- remove this
Dim distinctJoints = From row In spotsTable.AsEnumerable()
                     Group row By Key = row("FUNCJOINTCODE") Into Group
                     Select Key, Group