没有使用 int 调用的参数的字符串函数应该生成失败



我们有一个 VB.NET 项目,我正在做一些重构。许多当前函数需要将userId作为参数传入。例如:

Private Function Foo(userId As Integer) As String
Return "Foo"
End Function

但是现在,我已经使这个userId参数在我们的大部分代码中不再需要。

我想我会从所有不再需要它们的函数中删除所有userId参数,并尝试重新构建项目以查看调用代码需要更改的内容。令我惊讶的是,代码构建成功。

我了解到你可以调用一个函数,它返回一个字符串并且不接受任何参数,但仍然传递一个Integer值。 VB.NET 生成/执行此代码,就像您尝试调用函数一样,然后从指定索引处的 String 中获取字符。例如:

Imports System
Public Module MyModule
Private Function Foo() As String
Return "Foo"
End Function
Public Sub Main()
Console.WriteLine(Foo(0)) ' prints 'F'
Console.WriteLine(Foo(1)) ' prints 'o'
End Sub
End Module

(.NET Fiddle)

我希望我的构建在这种情况下失败。我尝试使用Option Strict OnOption Explicit On但似乎都没有改变这种行为。

有没有办法使这种函数调用在我的 VB.NET 项目中无效?

创建一个没有参数的重载,它是原始函数在其他方面的副本。

Public Function Foo() As String
Return "Foo"
End Function

现在将 userId 的类型更改为其他内容(不是Object或任何数字等)

Public Function Foo(userId As DateTime) As String
Return "Foo"
End Function

由于参数存在重载,编译器认为你的意思是调用它,而不是索引 chararray。所以你有编译错误。修复错误

然后删除原始函数。

最新更新