4

私はC#でこれを行うことができます..

int number = 2;
string str = "Hello " + number + " world";

..そして str は「Hello 2 world」になります。

VB.NETでは、これを行うことができました..

Dim number As Integer = 2
Dim str As String = "Hello " + number + " world"

..しかし、「文字列「Hello」から「Double」型への変換は無効です」という InvalidCastException が発生します。

どちらの場合も .ToString() を使用する必要があることは承知していますが、このままのコードで何が起こっているのでしょうか?

4

4 に答える 4

14

VB では、文字列連結演算子は + ではなく & だと思うので、次のように試してください。

Dim number As Integer = 2
Dim str As String = "Hello " & number & " world"

基本的に、VB が + を見ると、数値の加算を行うか、型で定義された加算演算子を使用しようとしていると思われます (または、オプションに基づいて、間違いなく他のより複雑なもの...)System.String加算演算子を定義していないことに注意してください-それはすべて隠されていますへの呼び出しによるコンパイラでString.Concat。(これにより、複数の文字列をより効率的に連結できます。)

于 2008-11-07T08:32:39.110 に答える
5

+Visual Basic では、演算子と演算子が区別され&ます。式が文字列でない場合、&は文字列に変換します。

&演算子 (Visual Basic)

オペレーターは、+より複雑な評価ロジックを使用して、最終キャストを何にするかを決定します (たとえば、Option Strict構成などの影響を受けます) 。

+演算子 (Visual Basic)

于 2008-11-07T08:33:09.157 に答える
3

可能であれば、生の文字列連結を避けることをお勧めします。

良い代替手段は string.format を使用することです:

str = String.Format("Hello {0} workd", Number)

または、System.Text.StringBuilder クラスを使用します。これは、より大きな文字列連結でもより効率的です。

どちらも自動的にパラメータを文字列にキャストします。

于 2008-11-07T09:08:23.670 に答える
1

VB のプラス (+) 演算子はあいまいです。

Option Explicit がオンになっていない場合、私の記憶が正しければ、これを行うことができます。

Dim str = 1 + "2"

str を整数 = 3 として取得します。

明示的に文字列連結が必要な場合は、アンパサンド演算子を使用します

Dim str = "Hello " & number & " world"

そして、喜んで数値を文字列に変換します。

この動作は下位互換性のために残されていると思います。

VB でプログラミングするときは、常にアンパサンドを使用して文字列を連結します。

于 2008-11-07T08:33:20.967 に答える