+ 演算子 (Visual Basic)
2 つの数を加算するか、数値式の正の値を返します。 2 つの文字列式を連結するためにも使用できます。
expression1 + expression2
- or -
+ expression1
指定項目
語句 |
定義 |
expression1 |
必ず指定します。 任意の数式または文字列式を指定します。 |
expression2 |
+ 演算子が負の値を計算している場合を除き、必ず指定します。 任意の数式または文字列式を指定します。 |
結果
expression1 と expression2 がどちらも数値の場合、結果は 2 つの合計を計算した値になります。
expression2 が指定されなければ、+ 演算子は単項恒等演算子となり、式の値は変わりません。 つまり、演算において expression1 の符号が保持されるため、expression1 が負であれば結果は負になります。
expression1 と expression2 がどちらも文字列であれば、結果は 2 つの値を連結した文字列になります。
expression1 と expression2 の型が異なる場合は、2 つの型、内容、および Option Strict ステートメント の設定に応じて異なる処理が行われます。 詳細については、「解説」の表を参照してください。
サポートされている型
unsigned 型と浮動小数点型を含むすべての数値型、および 10 進型 (Decimal)、文字列型 (String)。
解説
一般に、+ は可能であれば加算を行い、両方の式が文字列の場合にだけ連結を行います。
どちらの式も Object でない場合、Visual Basic は次の処理を行います。
式のデータ型 |
コンパイラによる処理 |
両方の式が数値型 (SByte、Byte、Short、UShort、Integer、UInteger、Long、ULong、Decimal、Single、または Double) の場合 |
加算。 結果のデータ型は、expression1 と expression2 のデータ型に適した数値型です。 「演算子の結果のデータ型 (Visual Basic)」の「整数演算」の表を参照してください。 |
両方の式が文字列型 (String) の場合 |
文字列連結。 |
一方が数値データ型で他方が文字列の場合 |
Option Strict が On であれば、コンパイル エラーが発生します。 Option Strict が Off であれば、String が倍精度浮動小数点数型 (Double) に暗黙的に変換されて加算されます。 String を倍精度浮動小数点数型 (Double) に変換できない場合は、InvalidCastException 例外がスローされます。 |
一方が数値で他方が Nothing (Visual Basic) の場合 |
Nothing を値 0 として加算が行われます。 |
一方が文字列で他方が Nothing の場合 |
Nothing を値 "" として連結が行われます。 |
一方の式が Object 式である場合、Visual Basic は次の処理を行います。
式のデータ型 |
コンパイラによる処理 |
Object 式に数値が格納され、もう一方が数値型の場合 |
Option Strict が On であれば、コンパイル エラーが発生します。 Option Strict が Off であれば、加算が行われます。 |
Object式に数値が格納され、もう一方が文字列型の場合String 型です。 |
Option Strict が On であれば、コンパイル エラーが発生します。 Option Strict が Off であれば、String が Double に暗黙的に変換されて加算されます。 String を倍精度浮動小数点数型 (Double) に変換できない場合は、InvalidCastException 例外がスローされます。 |
Object 式に文字列が格納され、もう一方が数値型の場合 |
Option Strict が On であれば、コンパイル エラーが発生します。 Option Strict が Off であれば、文字列の Object が Double に暗黙的に変換されて加算されます。 文字列の (Object) を倍精度浮動小数点数型 (Double) に変換できない場合は、InvalidCastException 例外がスローされます。 |
Object式に文字列が格納され、もう一方が String 型です。 |
Option Strict が On であれば、コンパイル エラーが発生します。 Option Strict が Off であれば、Object が String に暗黙的に変換されて連結されます。 |
両方の式が Object である場合、Visual Basic は次の処理を行います (Option Strict Off の場合のみ)。
式のデータ型 |
コンパイラによる処理 |
両方の Object 式に数値が格納されている場合 |
加算。 |
両方の Object 式が文字列型 (String) である場合 |
文字列連結。 |
一方の Object 式に数値が格納され、他方に文字列が格納されている場合 |
文字列の Object を倍精度浮動小数点数型 (Double) に暗黙的に変換して加算します。 文字列の Object を数値に変換できない場合は、InvalidCastException 例外がスローされます。 |
いずれかの Object 式が Nothing または DBNull に評価される場合、+ 演算子はそれを値 "" の String として扱います。
注意
+ 演算子を使用すると、加算と文字列連結のどちらが行われるのか、事前にはわかりにくい場合があります。 連結に & 演算子を使用することで、あいまいさがなくなり、プログラムの可読性が向上します。
オーバーロード
+ 演算子はオーバーロードできます。つまり、オペランドがクラスや構造体を型として持つ場合に、演算子の動作をそのクラスや構造体で再定義できるという意味です。 このようなクラスまたは構造体でこの演算子を使用している場合、再定義された動作を確認してください。 詳細については、「演算子プロシージャ (Visual Basic)」を参照してください。
使用例
+ 演算子を使って数値を加算する例を次に示します。 両方のオペランドが数値であれば、Visual Basic は算術演算を行います。 算術演算の結果は、2 つのオペランドの合計になります。
Dim sumNumber As Integer
sumNumber = 2 + 2
sumNumber = 4257.04 + 98112
' The preceding statements set sumNumber to 4 and 102369.
+ 演算子を使用して、文字列を連結することもできます。 両方のオペランドが文字列であれば、Visual Basic はこれらを連結します。 連結結果は 2 つのオペランドの内容を前後につなげた単一の文字列になります。
オペランドの型が同じでない場合、結果は Option Strict ステートメント の設定によって異なります。 Option Strict が On であれば、結果は次の例のようになります。
Option Strict On
Dim var1 As String = "34"
Dim var2 As Integer = 6
Dim concatenatedNumber As Integer = var1 + var2
...
' The preceding statement generates a COMPILER ERROR.
Option Strict が Off であれば、結果は次の例のようになります。
Option Strict Off
Dim var1 As String = "34"
Dim var2 As Integer = 6
Dim concatenatedNumber As Integer = var1 + var2
...
' The preceding statement returns 40 after the string in var1 is
' converted to a numeric value. This might be an unexpected result.
' We do not recommend use of Option Strict Off for these operations.
あいまいさをなくすため、連結には + 演算子ではなく & 演算子を使うようにしてください。