Dlaczego ludzie mylą ciągi z literałami ciągu? Przyjęta odpowiedź jest świetną odpowiedzią na inne pytanie; nie do tego.
Wiem, że to stary temat, ale przyszedłem tutaj z prawdopodobnie tym samym pytaniem co OP, i frustrujące jest obserwowanie, jak ludzie wciąż go błędnie interpretują. A może źle to rozumiem, nie wiem.
Z grubsza mówiąc, ciąg znaków to obszar pamięci komputera, który podczas wykonywania programu zawiera sekwencję bajtów, które można odwzorować na znaki tekstowe. Z drugiej strony, literał ciągu znaków jest fragmentem kodu źródłowego, który nie został jeszcze skompilowany i reprezentuje wartość użytą do zainicjowania ciągu znaków później podczas wykonywania programu, w którym się pojawia.
W języku C # instrukcja ...
string query = "SELECT foo, bar"
+ " FROM table"
+ " WHERE id = 42";
... nie produkuje trzywierszowego sznurka, ale jedną wkładkę; konkatenacja trzech łańcuchów (każdy zainicjowany z innego literału), z których żaden nie zawiera modyfikatora nowej linii.
To, o co OP wydaje się pytać - a przynajmniej to, o co pytałbym tymi słowami - nie polega na tym, jak wprowadzić w skompilowanym ciągu znaków podział wierszy naśladujący te znajdujące się w kodzie źródłowym, ale na jak długo rozdzielić dla zachowania przejrzystości , pojedynczy wiersz tekstu w kodzie źródłowym bez wprowadzania przerw w skompilowanym ciągu. I nie wymagając dłuższego czasu wykonywania, spędziłem dołączając do wielu podciągów pochodzących z kodu źródłowego. Podobnie jak końcowe ukośniki odwrotne w literale ciągu wielowierszowego w javascript lub C ++.
Sugerowanie użycia dosłownych ciągów, nieistotnych StringBuilder
s, s, String.Join
a nawet funkcji zagnieżdżonych z odwracaniem ciągów, a co nie, sprawia, że myślę, że ludzie tak naprawdę nie rozumieją pytania. A może nie rozumiem tego.
O ile mi wiadomo, C # nie ma (przynajmniej w wersji paleolitycznej, której wciąż używam, z poprzedniej dekady) funkcji czystego generowania wieloliniowych literałów łańcuchowych, które można rozwiązać podczas kompilacji, a nie wykonywania.
Być może obecne wersje to obsługują, ale pomyślałem, że podzielę różnicę, którą dostrzegam między łańcuchami i literałami łańcucha.
AKTUALIZACJA:
(Od komentarza MeowCat2012) Możesz. Podejście „+” OP jest najlepsze. Zgodnie ze specyfikacją gwarantowana jest optymalizacja: http://stackoverflow.com/a/288802/9399618