Вопрос:
Пожалуйста, простите меня вопрос начинающего:)
string S=»abc»; S+=»»;
не будет выполняться.
string S=»abc»; S+=»\»;
сделает S = “abc \”
Как я могу сделать S = “abc ”?
Ответ №1
Ваша вторая часть кода – это то, что вы хотите (или дословный строковый литерал @»», как предлагали другие), и добавляет только один обратный слэш – распечатайте его на консоли, и вы это увидите.
Эти два фрагмента кода:
S += «\»;
и
S += @»»;
в точности эквивалентны. В обоих случаях одна обратная косая черта добавляется 1.
Я подозреваю, что вас смущает представление отладчика, которое ускользает от обратных косых черт (и некоторых других символов). Вы можете проверить, что даже с отладчиком, посмотрев на S.Length, который вы увидите, это 4, а не 5.
1 Обратите внимание, что он не изменяет данные в существующей строке, но устанавливает значение S для ссылки на новую строку, состоящую из оригинала с обратной косой чертой на конец. Строковые объекты в .NET неизменяемы – но это целая другая тема…
Ответ №2
Попробуйте следующее:
String S = «abc»; S += @»»;
@= verbatim string literal
http://msdn.microsoft.com/en-us/library/aa691090%28v=vs.71%29.aspx
http://msdn.microsoft.com/en-us/library/vstudio/362314fe.aspx
Ответ №3string S = «abs» + «\»;
Должен и результат abc.
То, что вы, вероятно, видите, это то, как отладчик /intellisense визуализирует эту строку для вас.
Попробуйте распечатать строку на консоли или отобразить ее в текстовом поле.
Ответ №4
У вас уже есть решение. Причина, по которой он выглядит как abc\, в то время как отладка связана с тем, что VS будет избегать обратных косых черт, напечатайте значение S в окне консоли, и вы увидите abc.
Вы можете добавить @ в начало строкового литерала, например.
string S=»abc»; S+= @»»;
Которое достигнет того же.
Ответ №5
Вы можете избежать обратной косой черты с помощью символа @:
string S=»abc»; S += @»»;
Но это точно соответствует тому, что вы написали во втором примере. Путаница в этом связана с тем, что отладчик Visual Studio продолжает избегать этих символов, хотя ваша исходная строка будет содержать только одну обратную косую черту.
Ответ №6
Ваш второй пример отлично выглядит
string S=»abc»; S+=»\»;
Visual studio отображает строку, экранированную, поэтому вы видите две строки в строке результата. Если вы не хотите использовать escaping, объявляете строку вроде этого
@»»
Это не компиляция, потому что компилятор ожидает символа после escape-символа
string S=»abc»; S+=»»; Ответ №7string S=»abc»; S+=»\»; Console.WriteLine(S); // This is what you’re missing 😉
Вы увидите, что ваша строка не совсем прав.
Обратная косая черта () является escape-символом и позволяет вам получить специальные символы, которые вы обычно не могли бы вставлять в строку, например «rn», которая представляет символ NewLine или «»», который в основном дает вам символ «.
Чтобы получить символ , вам нужно ввести «\», что именно вы делаете, а также то, что вы хотите.
Использование verbatim (@) заменяет все вхождения на \, поэтому @»» == «\». Обычно это используется для путей и регулярных выражений, где буквальный необходим в больших количествах. Говорить @»C:MyDirectoryMyFile» более удобно, чем «C:\MyDirectory\MyFile».
Ответ №8
Попробуйте это
string s=»abc»; s = s+»\»;