web-dev-qa-db-ja.com

文字列を返すVB.Net関数が実際に1文字しか返さないのはなぜですか?

文字列を返す関数を呼び出していますが、実際には、返されるはずの文字列の最初の文字のみが返されます。

これは、私が経験している問題を再現するためのサンプルコードです。

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

関数呼び出しは次のようになります。

SomeStringValue = GetSomeStringValue(Value)

これが文字列全体を返さないのはなぜですか?

33
Kibbee

注:この回答は元々OPのKibbeeによって自己回答として書かれました。ただし、実際の個別の回答としてではなく、質問の本文に書かれています。OPは繰り返しの要求を拒否したため、モデレーターを含む他のユーザーがサイトのルールに従って再投稿するために、私は自分で再投稿しています。

100の異なることを試し、コードをリファクタリングし、デバッガーでコードを何度もステップスルーし、同僚に問題を調べてもらった後、私はついに天才の瞬間に答えを発見しました。

コードをリファクタリングしていたある時点で、関数を変更してValueパラメーターを削除し、次のようにしました。

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

ただし、関数を呼び出すときに渡したパラメーターを削除することを怠りました。

SomeStringValue = GetSomeStringValue(Value)

コンパイラーは、私が行っていたことを角かっこなしで関数を呼び出すものとして解釈したため、文句を言いませんでした。これは、VB6時代のレガシー機能です。次に、Valueパラメーターは、関数から返された文字列(別名文字配列)の配列インデックスに変換されます。

だから私はパラメータを削除しました、そしてすべてがうまくいきました:

SomeStringValue = GetSomeStringValue()

他の人が問題に遭遇したとき/発生した場合にそれを認識し、私よりもはるかに迅速に問題を解決できるように、これを投稿しています。私が解決するのにかなりの時間がかかりました、そして私は私が他の人をいつか救うことができることを願っています。

13
Pops