【问题标题】:Vb.net: Calling a Function That Does not Match Prototype Passes Compiler CheckVb.net:调用与原型不匹配的函数通过编译器检查
【发布时间】:2013-03-11 07:16:06
【问题描述】:

我遇到了一些我想解释的事情。我有一个函数 InitializeValues() 设置组合框,并将数据源设置为数据表。使用不带参数的公共方法 GetFileSourceData 从 DGVMain_Functions 类的实例中检索数据表。
问题是对 GetFileSourceData(MyConnectionString) 的调用实际上会编译和运行。当返回数据表并尝试设置为 cbo 的数据源时,会发生运行时错误。正常调用 GetFileSourceData() 可以正常工作。 我曾就此询问过另一位开发人员,他认为我有一些陈旧的参考资料,因此我清理了项目,然后删除了调试文件夹中的所有内容并重新构建,但它仍然具有相同的行为。

我的问题是,为什么编译器会接受这个而不抛出语法错误,而且为什么它甚至到了你可以实际进入这个不应该存在的函数的地步,并让它在返回时失败?

编辑:将 Option Strict 设置为 On,确实会使编译器捕捉到这一点。 “Option Strict On 不允许从 'String' 到 'Integer' 的隐式转换。但这仍然不是我想看到的错误。我想知道为什么它不显示“没有这样的重载/定义该功能存在”。

错误是这样的:

创建表单时出错。有关详细信息,请参阅 Exception.InnerException。错误是:错误:错误:从字符串“用户 id=XXXX;数据源=XXXXXX”到类型“整数”的转换无效。Microsoft.VisualBasicFileProcessor。 "InnerException = {"输入字符串的格式不正确。"}"

Private Sub InitializeValues()
  cboFileSource.DisplayMember = "filesource"
  cboFileSource.ValueMember = "filesource"
  'first call works fine since it matches
  cboFileSource.DataSource = DgvMain_functs.GetFileSourceData()
  'below is the call that gets through the complier and actually runs, fails on return
  cboFileSource.DataSource = DgvMain_functs.GetFileSourceData(MyConnectionString)         
End Sub

Public Function GetFileSourceData() As DataTable
  Try
    Dim dt As DataTable
    Dim strSQL As String = "select distinct filesource from FileUpload_FolderPath"
    dt = SqlHelper.ExecuteDataset(MyConnectionString, CommandType.Text, strSQL).Tables(0)
    Return dt
  Catch ex As Exception
    Throw New Exception("Error in DGVMain_Functions: " & ex.Message & ex.Source)
  End Try
End Function

【问题讨论】:

  • 我使用的是默认选项,不确定那些是 atm。您是在询问“显式”和“严格”选项标志吗?既然你提出来了,让我来看看那些。
  • 很奇怪。我可以确认它与 Option Strict On 完美编译,这条线ListBox1.DataSource = GetFileSourceData(CInt("123"))Option Strict 建议通过CInt() 转换"123")。

标签: vb.net function compiler-construction syntax-error


【解决方案1】:

正如您在评论中暗示的那样,Option Explicit On 肯定会解决这个问题。

【讨论】:

  • 实际上 Option Explicit On 没有捕捉到它,只有 Option Strict On 捕捉到了。但这仍然不能解释当定义没有参数时函数接受参数的问题。在我的评论中,我实际上是在回复一位评论者,但在过去几分钟内,当他问我有哪些标志时,他的评论因某种原因消失了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多