【问题标题】:Option Strict On disallows late bindingOption Strict On 不允许后期绑定
【发布时间】:2012-09-04 17:16:13
【问题描述】:

有人可以帮我解决这个错误吗?

Option 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 来解决此问题,但我真的不想这样做。还有其他方法吗?

【问题讨论】:

  • 您要修复什么错误?
  • 什么错误?你没有说你在哪一行收到了什么错误。另外,共享 StrComp 函数。这不是标准的 vb 函数。
  • StrComp 是一个标准的 VB 函数——这里的调用是合适的,所以错误是“可能”与“AreaCts”索引器分配有关,但谁知道呢。
  • ...或 String.IsNullOrEmpty/Whitespace 在这种情况下

标签: vb.net visual-studio-2010 strcmp


【解决方案1】:

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

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

【讨论】:

  • @David W 如果您阅读标题,您就会知道我遇到了什么错误。
  • 我得到了一些只能在 strict = off 下工作的代码,但我不想禁用它。谢谢!
  • 更好的解决方案是将您的课程分成后期绑定和早期绑定的部分。然后,您可以创建两个 partial 类,然后对 Late Bound 部分使用 Option Strict Off。
  • @MattWilko 这是一个非常好的观点。我很惊讶我没有提到这一点。我更新了答案以包含该选项。谢谢!
【解决方案2】:

您需要使 BindingSource 充当强类型数据源。见文档中的备注:http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx

【讨论】:

    【解决方案3】:

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

    Dim AreaCts as Array
    

    试试

    Dim AreaCts() as Double
    

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

    【讨论】:

      【解决方案4】:

      这是一篇旧帖子,但我遇到了“Option Strict On 不允许后期绑定”错误。也许另一个答案会帮助别人。当您尝试将 SF6StdData 绑定源中的数据转换为字符串时,可能会出现问题。您可以通过定义具有所需类型的局部变量,然后使用 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”,而是定义了一个类型为 Checkbox 的变量 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-26
        • 1970-01-01
        • 2019-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多