没有使用Int调用的参数的字符串函数应该失败构建

Jes*_*ebb 7 vb.net parameters string-function

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

Private Function Foo(userId As Integer) As String
    Return "Foo"
End Function
Run Code Online (Sandbox Code Playgroud)

但是现在,我已经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
Run Code Online (Sandbox Code Playgroud)

(.NET小提琴)

在这种情况下,我希望我的构建失败.我已经尝试使用Option Strict OnOption Explicit On但也似乎改变这种行为.

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

djv*_*djv 4

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

Public Function Foo() As String
    Return "Foo"
End Function
Run Code Online (Sandbox Code Playgroud)

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

Public Function Foo(userId As DateTime) As String
    Return "Foo"
End Function
Run Code Online (Sandbox Code Playgroud)

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

然后删除原来的函数。