为啥返回字符串的 VB.Net 函数实际上只返回一个字符?

Posted

技术标签:

【中文标题】为啥返回字符串的 VB.Net 函数实际上只返回一个字符?【英文标题】:Why does a VB.Net function that returns string only actually return a single character?为什么返回字符串的 VB.Net 函数实际上只返回一个字符? 【发布时间】:2008-09-27 01:24:24 【问题描述】:

我正在调用一个返回字符串的函数,但它实际上只返回它应该返回的字符串的第一个字符。

这是重现我遇到的问题的示例代码:

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

函数调用如下:

SomeStringValue = GetSomeStringValue(Value)

为什么这不返回整个字符串?

【问题讨论】:

不喜欢参数和数组索引看起来相同的语言的另一个原因...... 哇,这真是一个令人印象深刻的问题。 这一切都带有严格和明确的选项吗? 选项严格打开,选项显式关闭。但是,经过测试,VB 在将 char 分配给字符串时似乎没有抱怨,即使选项 Explicit 已打开。 【参考方案1】:

注意:这个答案最初是由 OP Kibbee 写的,作为一个自我答案。但是,它写在问题的正文中,而不是作为实际的单独答案。由于OP拒绝了包括版主在内的其他用户一再要求按照网站规则转发,我自己转发。

在尝试了一百种不同的东西,重构了我的代码,在调试器中多次单步执行代码,甚至让同事调查了问题之后,我终于灵机一动,找到了答案。

在重构代码的某个时候,我更改了函数以去掉 Value 参数,保留如下:

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

但是,我在调用函数时忽略了删除我传入的参数:

SomeStringValue = GetSomeStringValue(Value)

编译器没有抱怨,因为它将我所做的解释为调用不带括号的函数,这是 VB6 时代的遗留功能。然后,Value 参数转换为从函数返回的字符串(又名字符数组)的数组索引。

所以我删除了参数,一切正常:

SomeStringValue = GetSomeStringValue()

我发布此内容是为了让其他人在遇到问题时/如果他们遇到问题时能够识别出问题,并且能够比我更快地解决问题。自己解决了好久,希望能帮别人省点时间。

【讨论】:

以上是关于为啥返回字符串的 VB.Net 函数实际上只返回一个字符?的主要内容,如果未能解决你的问题,请参考以下文章

VB.NET 函数返回

为啥 PHP 的 uniqid 函数只返回 13 位而不是 14?

为啥替换在空字符串上不返回任何内容

如何在 vb.net 中使用 Stacktrace 返回错误行号

为啥这个数据库访问代码不起作用? VB.net

为啥 CreateWindowEx 返回 0