文字列を返すVB.Net関数が実際に単一の文字のみを返すのはなぜですか?

StackOverflow https://stackoverflow.com/questions/142697

  •  02-07-2019
  •  | 
  •  

質問

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

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

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

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

SomeStringValue = GetSomeStringValue(Value)

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

役に立ちましたか?

解決

  

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top