string
클래스 메타 데이터를 보면 연산자 ==
와 !=
오버로드 만 보입니다 . 그렇다면 ‘ +
‘연산자에 대한 연결을 어떻게 수행 할 수 있습니까?
편집 :
문자열 연결에 대한 Eric Lippert의 흥미로운 메모 :
2 부 ( http://www.joelonsoftware.com/articles/fog0000000319.html )에 언급 된 Joel의 슈퍼 기사도 있습니다.
답변
그렇지 않습니다-C # 컴파일러는 🙂
그래서이 코드 :
string x = "hello";
string y = "there";
string z = "chaps";
string all = x + y + z;
실제로 다음과 같이 컴파일됩니다.
string x = "hello";
string y = "there";
string z = "chaps";
string all = string.Concat(x, y, z);
(Gah-중간 편집이 실수로 다른 비트를 제거했습니다.)
여기에 여러 개의 문자열 연결이 있음을 인식하는 C # 컴파일러의 이점은 중간 문자열을 생성하지 않고 및 x + y
연결의 일부로 다시 복사해야한다는 것 입니다. 대신 한 번에 모든 작업을 수행합니다.(x + y)
z
편집 : 루프에서 연결하면 컴파일러 가 아무것도 할 수 없습니다 . 예를 들어 다음 코드는 다음과 같습니다.
string x = "";
foreach (string y in strings)
{
x += y;
}
다음과 같이 끝납니다.
string x = "";
foreach (string y in strings)
{
x = string.Concat(x, y);
}
… 그래서 이것은 않는 쓰레기를 많이 생성하고, 당신이 사용해야하는 이유입니다 StringBuilder
같은 경우에. 더 많은 질문에 답할 수 있도록 두 가지에 대해 자세히 설명 하는 기사 가 있습니다 .