33

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

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

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

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

SomeStringValue = GetSomeStringValue(Value)

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

4

1 に答える 1

13

注:この回答は、もともと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()

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

于 2011-06-03T17:09:55.770 に答える