为什么返回字符串的VB.Net函数实际上只返回单个字符?

33

我正在调用一个返回字符串的函数,但它实际上只返回了该字符串应该返回的第一个字符。以下是一个可以重现我遇到问题的示例代码:

Public Function GetSomeStringValue(Value as Integer) As String
    ... Code Goes here
    Return Some_Multicharacter_string
End Function

函数调用的格式如下:

SomeStringValue = GetSomeStringValue(Value)

为什么这个代码没有返回整个字符串?


1
讨厌那些参数和数组索引看起来相同的语言的另一个原因... - Jonathan Rupp
哇,这是一个非常令人印象深刻的陷阱。 - Greg Hewgill
这是在启用Option Strict和Option Explicit的情况下完成的吗? - Maslow
Option Strict 已开启,但 Option Explicit 未开启。然而,在测试后发现,即使在 Option Explicit 开启的情况下,VB 在将 char 赋值给 string 时也不会报错。 - Kibbee
1个回答

13

注意:这个答案最初是由提问者Kibbee作为自我回答撰写的,但是它被写在问题主体中,而不是作为实际的独立回答。由于该提问者拒绝其他用户(包括版主)多次要求按照网站规则重新发布,因此我将其重新发布。

在尝试了许多不同的方法、重构代码、多次在调试器中跟踪代码甚至让同事查看问题后,我终于在一瞬间灵机一动地发现了答案。

在重构代码时,我将函数更改以摆脱Value参数,并将其留下如下所示:

Public Function GetSomeStringValue() As String
    ... Code Goes here
    Return Some_Multicharacter_String
End Function

然而,在调用函数时,我忽略了删除我传递的参数:

SomeStringValue = GetSomeStringValue(Value)
编译器没有报错,因为它将我所做的解释为调用函数而不带括号,这是VB6时代的遗留特性。然后,Value参数转化为返回自函数的字符串(也称字符数组)的数组索引。
所以我去掉了参数,一切正常运作:
SomeStringValue = GetSomeStringValue()

我发布这篇文章是为了让其他人在遇到这种问题时能够识别它,并能比我更快地解决它。我花了相当长的时间才解决这个问题,希望我可以为他人节省一些时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接