違いは何ですか +
および&
VB.NETで文字列を結合するには?
両方のオペランドが文字列の場合、違いはありません。ただし、一方のオペランドが文字列で、もう一方が数値の場合、問題が発生します。以下のコードを参照してください。
"abc" + "def" = "abcdef"
"abc" & "def" = "abcdef"
"111" + "222" = "111222"
"111" & "222" = "111222"
"111" & 222 = "111222"
"111" + 222 = 333
"abc" + 222 = conversion error
したがって、整数、浮動小数点、小数を文字列に連結しようとする可能性があるため、連結する場合は常に&
を使用することをお勧めします。それを行う。
&演算子は常に両方のオペランドが文字列であることを確認し、+演算子はオペランドに一致するオーバーロードを見つけます。
表現 1 & 2
は値 "12"を与え、式1 + 2は値3を与えます。
両方のオペランドが文字列の場合、結果に違いはありません。
なし。
以下をご覧ください。次の2行のコードは、まったく同じILコードにコンパイルされます。
Module Module1
Sub Main()
Dim s1 As String = "s1"
Dim s2 As String = "s2"
s2 += s1
s1 &= s2
End Sub
End Module
コンパイル((注System.String::Concat
):
.method public static void Main() cil managed
{
.entrypoint
.custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = ( 01 00 00 00 )
// Code size 31 (0x1f)
.maxstack 2
.locals init ([0] string s1,
[1] string s2)
IL_0000: nop
IL_0001: ldstr "s1"
IL_0006: stloc.0
IL_0007: ldstr "s2"
IL_000c: stloc.1
IL_000d: ldloc.1
IL_000e: ldloc.0
IL_000f: call string [mscorlib]System.String::Concat(string,
string)
IL_0014: stloc.1
IL_0015: ldloc.0
IL_0016: ldloc.1
IL_0017: call string [mscorlib]System.String::Concat(string,
string)
IL_001c: stloc.0
IL_001d: nop
IL_001e: ret
} // end of method Module1::Main
+演算子は、加算または連結のいずれかです。 &は連結のみです。式が両方とも文字列の場合、結果は同じになります。
文字列を操作するときは&を使用し、数字を操作するときは+を使用しているため、意図が混乱することはありません。誤って+を使用し、1つの式が文字列で1つが数値の場合、望ましくない結果が生じるリスクがあります。
ほとんどの場合、違いはありません。ただし、ベストプラクティスは次のとおりです。
「+」は、整数加算用に予約する必要があります。なぜなら、Option Strict Onを使用しない場合あなたは本当に次のような状況を台無しにしたかもしれません:
Input + 12
はあなたに20
の代わりに 812
。これは、入力がPOST/GETから来るASP.NETアプリケーションでは特に悪い場合があります。
簡単に言えば:文字列を結合するには、常に「+」ではなく「&」を使用します。
もちろん、適切な場所では StringBuilder を使用してください:)
両方のタイプが静的に System.String に型付けされている場合、コード間に違いはありません。両方とも String.Concat メンバーに解決されます(これが+
は文字列に対応しています)。
ただし、オブジェクトが文字列に強く型付けされていない場合、Visual Basicの遅延バインディングが開始され、2つのまったく異なるルートに進みます。 +
versionは、文字通りオブジェクトを追加しようとするadd操作を実行しようとします。これにより、両方の値を数値に変換してから追加するためのあらゆる方法が試行されます。
&
演算子は連結を試みます。 Visual Basicランタイムは、あらゆる種類の変換を行って、両方の値を文字列に変換します。その後、String.Concat
結果。
MSDNドキュメントから直接: Visual Basicの連結演算子
2つの連結演算子の違い
+演算子(Visual Basic)の主な目的は、2つの数値を追加することです。ただし、数値オペランドと文字列オペランドを連結することもできます。 +演算子には、追加、連結、コンパイラエラーの通知、実行時InvalidCastException例外のスローのいずれかを決定する複雑なルールセットがあります。
&演算子(Visual Basic)は文字列オペランドに対してのみ定義され、Option Strictの設定に関係なく、常にオペランドを文字列に広げます。 &演算子は、文字列専用に定義されており、意図しない変換を生成する可能性を減らすため、文字列の連結に推奨されます。
MSDNを信頼してください! :-)
文字列を結合する場合はなし:
Dim string1 As String = "A" + "B"
Dim string2 As String = "A" & "B"
If string1.Equals(string2) And string2.Equals(string1) Then
Debugger.Break()
End If