Vb.net 选项Strict On不允许后期绑定
有人能帮我纠正这个错误吗 选项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
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