[c#] ‘+’연산자를 사용한 문자열 연결

string클래스 메타 데이터를 보면 연산자 ==!=오버로드 만 보입니다 . 그렇다면 ‘ +‘연산자에 대한 연결을 어떻게 수행 할 수 있습니까?

편집 :

문자열 연결에 대한 Eric Lippert의 흥미로운 메모 :

1 부

2 부

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같은 경우에. 더 많은 질문에 답할 수 있도록 두 가지에 대해 자세히 설명 하는 기사 가 있습니다 .


답변