Пожалуйста, простите меня вопрос начинающего:)
string S="abc";
S+="\";
не будет выполняться.
string S="abc";
S+="\\";
сделает S = “abc \\”
Как я могу сделать S = “abc \”?
Ваша вторая часть кода – это то, что вы хотите (или дословный строковый литерал @"\"
, как предлагали другие), и добавляет только один обратный слэш – распечатайте его на консоли, и вы это увидите.
Эти два фрагмента кода:
S += "\\";
и
S += @"\";
в точности эквивалентны. В обоих случаях одна обратная косая черта добавляется 1.
Я подозреваю, что вас смущает представление отладчика, которое ускользает от обратных косых черт (и некоторых других символов). Вы можете проверить, что даже с отладчиком, посмотрев на S.Length
, который вы увидите, это 4, а не 5.
1 Обратите внимание, что он не изменяет данные в существующей строке, но устанавливает значение S
для ссылки на новую строку, состоящую из оригинала с обратной косой чертой на конец. Строковые объекты в .NET неизменяемы – но это целая другая тема…
Попробуйте следующее:
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
string S = "abs" + "\\";
Должен и результат abc\
.
То, что вы, вероятно, видите, это то, как отладчик /intellisense визуализирует эту строку для вас.
Попробуйте распечатать строку на консоли или отобразить ее в текстовом поле.
У вас уже есть решение. Причина, по которой он выглядит как abc\\
, в то время как отладка связана с тем, что VS будет избегать обратных косых черт, напечатайте значение S
в окне консоли, и вы увидите abc\
.
Вы можете добавить @
в начало строкового литерала, например.
string S="abc";
S+= @"\";
Которое достигнет того же.
Вы можете избежать обратной косой черты с помощью символа @:
string S="abc";
S += @"\";
Но это точно соответствует тому, что вы написали во втором примере. Путаница в этом связана с тем, что отладчик Visual Studio продолжает избегать этих символов, хотя ваша исходная строка будет содержать только одну обратную косую черту.
Ваш второй пример отлично выглядит
string S="abc";
S+="\\";
Visual studio отображает строку, экранированную, поэтому вы видите две строки в строке результата. Если вы не хотите использовать escaping, объявляете строку вроде этого
@"\"
Это не компиляция, потому что компилятор ожидает символа после escape-символа
string S="abc";
S+="\";
string S="abc";
S+="\\";
Console.WriteLine(S); // This is what you're missing ;)
Вы увидите, что ваша строка не совсем прав.
Обратная косая черта (\
) является escape-символом и позволяет вам получить специальные символы, которые вы обычно не могли бы вставлять в строку, например "\r\n"
, которая представляет символ NewLine
или "\""
, который в основном дает вам символ "
.
Чтобы получить символ \
, вам нужно ввести "\\"
, что именно вы делаете, а также то, что вы хотите.
Использование verbatim (@
) заменяет все вхождения \
на \\
, поэтому @"\" == "\\"
. Обычно это используется для путей и регулярных выражений, где буквальный \
необходим в больших количествах. Говорить @"C:\MyDirectory\MyFile"
более удобно, чем "C:\\MyDirectory\\MyFile"
.
Попробуйте это
string s="abc";
s = s+"\\";