Vb.net 选项Strict On不允许后期绑定

Vb.net 选项Strict On不允许后期绑定,vb.net,visual-studio-2010,strcmp,Vb.net,Visual Studio 2010,Strcmp,有人能帮我纠正这个错误吗 选项Strict On不允许后期绑定 以下是导致错误的代码: Dim SF6StdData As BindingSource = New BindingSource() ' ... If StrComp(SF6StdData.Current("O2AreaCts").ToString, "") = 0 Then AreaCts(3) = 0 Else AreaCts(3) = Convert.ToDouble(SF6StdData.Current("O

有人能帮我纠正这个错误吗

选项Strict On不允许后期绑定

以下是导致错误的代码:

Dim SF6StdData As BindingSource = New BindingSource() 
' ...
If StrComp(SF6StdData.Current("O2AreaCts").ToString, "") = 0 Then
    AreaCts(3) = 0
Else
    AreaCts(3) = Convert.ToDouble(SF6StdData.Current("O2AreaCts").ToString)
End If

我需要重写代码,这样它就不会有任何错误。我知道我可以通过在项目属性中将Option Strict设置为Off来解决这个问题,但我真的不想这样做。是否有其他方法?

如果启用了
选项Strict
,则不允许后期绑定。如果需要执行后期绑定,唯一的选项是使用反射或关闭
选项Strict
。然而,一个可取之处是,您不必为整个项目关闭
选项Strict
。您可以为项目保留该选项,然后只需在需要执行后期绑定的任何代码文件顶部添加行
选项Strict Off
。这不是一个很好的解决方案,但总比影响整个项目要好


此外,由于文件顶部的
选项Strict
仅适用于该文件,因此它甚至不必应用于整个类。如果将类拆分为多个
部分类
文件,则可以为每个文件设置不同的
选项Strict
。例如,如果您将大多数类放在一个带有
选项Strict On
的文件中,然后只将
部分类中的一个方法放在带有
选项Strict Off
的单独文件中,那么只会松散地编译一个方法。类的其余部分将使用严格的规则进行编译

您需要使BindingSource充当强类型数据源。请参阅文档中的备注:

如果您声明的
AreaCts
没有类型,例如:

Dim AreaCts as Array
试一试


这修复了我的后期绑定错误。

这是一篇旧文章,但我遇到了错误“Option Strict On disallows late binding”。也许另一个答案会帮助其他人。当您尝试将sf6stddatabindingsource中的数据转换为字符串时,可能会出现问题。您可以通过定义一个具有所需类型的局部变量,然后使用Ctype将数据提取到正确的类型中来解决这个问题。下面是我如何解决类似问题的一个例子

此代码给了我延迟绑定错误:

    Friend Function CountNumCheckedInGroupbox(ByVal gbox As GroupBox, ByRef nameschecked() As String) As Integer
        Dim numchecked As Integer = 0
        For Each ctrl In gbox.Controls
            If TypeOf ctrl Is CheckBox Then                
                If ctrl.Checked = True Then
                    nameschecked(numchecked) = ctrl.Text
                    numchecked += 1
                End If
            End If
        Next
        Return numchecked
    End Function
在引用“ctrl.Checked”和“ctrl.Text”时发生后期绑定错误

我没有直接引用“ctrl”,而是定义了一个作为复选框键入的变量cbox。然后,我将信息从“ctrl”提取到cbox中。现在,代码不会显示延迟绑定错误:

    Friend Function CountNumCheckedInGroupbox(ByVal gbox As GroupBox, ByRef nameschecked() As String) As Integer
        Dim numchecked As Integer = 0
        Dim cbox As CheckBox
        For Each ctrl In gbox.Controls
        If TypeOf ctrl Is CheckBox Then
                cbox = CType(ctrl, CheckBox)
                If cbox.Checked = True Then
                    nameschecked(numchecked) = cbox.Text
                    numchecked += 1
                End If
            End If
        Next
        Return numchecked
    End Function

您要修复什么错误?什么错误?你不能说你在哪一行收到了什么错误。此外,共享StrComp功能。这不是标准的vb函数。StrComp是标准的vb函数-此处的调用是适当的,因此错误“可能”与“AreaCts”索引器赋值有关,但是谁知道呢…或者字符串中的.IsNullOrEmpty/Whitespacecase@DavidW如果你读了标题,你就会知道我遇到了什么错误。我得到了一些只适用于strict=off的代码,但我不想禁用它。谢谢!一个更好的解决方案是将类划分为后期绑定和早期绑定的部分。然后您可以创建两个分部类,只需对后期绑定的部分使用Option Strict Off即可。@MattWilko这是一个非常好的观点。我很惊讶我没有提到这一点。我更新了我的答案,加入了这个选项。谢谢
    Friend Function CountNumCheckedInGroupbox(ByVal gbox As GroupBox, ByRef nameschecked() As String) As Integer
        Dim numchecked As Integer = 0
        Dim cbox As CheckBox
        For Each ctrl In gbox.Controls
        If TypeOf ctrl Is CheckBox Then
                cbox = CType(ctrl, CheckBox)
                If cbox.Checked = True Then
                    nameschecked(numchecked) = cbox.Text
                    numchecked += 1
                End If
            End If
        Next
        Return numchecked
    End Function