VB.NET에서 문자열을 결합하기위한 +와 &의 차이점
차이 무엇 +
과 &
VB.NET에서 문자열을 접합는?
두 피연산자가 모두 문자열이면 차이가 없습니다. 그러나 피연산자 하나가 문자열이고 하나가 숫자이면 문제가 발생합니다. 아래 코드를 참조하십시오.
"abc" + "def" = "abcdef"
"abc" & "def" = "abcdef"
"111" + "222" = "111222"
"111" & "222" = "111222"
"111" & 222 = "111222"
"111" + 222 = 333
"abc" + 222 = conversion error
따라서 &
연결하려는 경우 항상 사용하는 것이 좋습니다 . 정수, 부동 소수점, 10 진수를 문자열에 연결하려고 할 수 있으므로 예외가 발생하거나 기껏해야 원하는 작업을 수행하지 않을 수 있습니다.
& 연산자는 항상 두 피연산자가 문자열인지 확인하고 + 연산자는 피연산자와 일치하는 오버로드를 찾습니다.
표현식 1 & 2
은 "12"값을 제공하고 표현식 1 + 2는 값 3을 제공합니다.
두 피연산자가 모두 문자열이면 결과에 차이가 없습니다.
없음.
아래에서 볼 수 있습니다. 이 두 줄의 코드는 정확히 동일한 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
+ 연산자는 더하기 또는 연결 일 수 있습니다. &는 연결 일뿐입니다. 표현식이 두 문자열 인 경우 결과는 동일합니다.
문자열로 작업 할 때는 &를 사용하고 숫자로 작업 할 때는 +를 사용하므로 내 의도에 대해 혼동이 없습니다. 실수로 +를 사용하고 하나의 표현식이 문자열이고 하나는 숫자 인 경우 원하지 않는 결과가 발생할 위험이 있습니다.
대부분의 경우 차이가 없습니다. 그러나 모범 사례는 다음과 같습니다.
"+" should be reserved for integer additions, because if you don't use Option Strict On then you might have really messed up situations such as:
Input + 12
might give you 20
instead of 812
. This can be especially bad in an ASP.NET application where the input comes from POST/GET.
Simply put: For joining strings, always use "&" instead of "+".
Obviously, use StringBuilder where it's suitable :)
If both of the types are statically typed to System.String, there is zero difference between the code. Both will resolve down to the String.Concat member (this is what +
does for strings).
However, if the objects are not strongly typed to string, Visual Basic late binding will kick in and go two very different routes. The +
version will attempt to do an add operation which literally tries to add the objects. This will do all manner of attempts to convert both values to a number and then add them.
The &
operator will attempt to concatenate. The Visual Basic runtime will go through all manner of conversions to convert both values to strings. It will then String.Concat
the results.
Straight from MSDN Documentation: Concatenation Operators in Visual Basic
Differences Between the Two Concatenation Operators
The + Operator (Visual Basic) has the primary purpose of adding two numbers. However, it can also concatenate numeric operands with string operands. The + operator has a complex set of rules that determine whether to add, concatenate, signal a compiler error, or throw a run-time InvalidCastException exception.
The & Operator (Visual Basic) is defined only for String operands, and it always widens its operands to String, regardless of the setting of Option Strict. The & operator is recommended for string concatenation because it is defined exclusively for strings and reduces your chances of generating an unintended conversion.
Do trust MSDN! :-)
None when joining strings:
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
참고URL : https://stackoverflow.com/questions/734600/the-difference-between-and-for-joining-strings-in-vb-net
'Programing' 카테고리의 다른 글
이 'for'루프가 유효하지 않은 이유는 무엇입니까? (0) | 2020.11.18 |
---|---|
Ruby on Rails 내에서 안전한 REST API를 구축하기위한 제안을 찾고 있습니다. (0) | 2020.11.18 |
Linux에서 ELF 파일의 데이터 섹션 내용을 어떻게 검사 할 수 있습니까? (0) | 2020.11.18 |
문자열 수식을 "실제"수식으로 바꾸는 방법 (0) | 2020.11.18 |
이미지와 텍스트 모두 가능한 UIButton? (0) | 2020.11.17 |