String.Replace не работает должным образом - PullRequest
0 голосов
/ 21 февраля 2012

У меня следующая проблема с String.Replace:

string str = "0˄0";
str = str.Replace("˄", "&&");

когда я распечатываю str, это будет "0 & 0" вместо "0 && 0". Чтобы получить "0 && 0", я должен написать

str = str.Replace("˄", "&&&&");

Почему это?

Ответы [ 3 ]

6 голосов
/ 21 февраля 2012

& - это специальный символ в WinForms, используемый для обозначения сочетаний клавиш.Использование && - это то, как WinForms экранирует символ &.

Итак, чтобы отобразить его в WinForms, вы обязательно должны будете разместить two & символы в вашей строке, как у вас здесь:

str = str.Replace("˄", "&&&&");

Это строго "вещь" WinForms и не имеет ничего общего со строкой C # или .NET, экранируемой специально.Так было, по крайней мере, с Visual Basic 4, возможно, до этого.

3 голосов
/ 21 февраля 2012

Вы можете проверить это сообщение: http://moiashvin -tech.blogspot.com / 2008/05 / бежать-амперсанд-символ-в-c.html

Ярлыки обрабатываются по-разному в WinForms. Вы должны быть в состоянии сделать, как предлагает пост, и установить для свойства UseMnemonic значение false, посмотрите, работает ли это.

1 голос
/ 21 февраля 2012

Ответ содержится в первом комментарии: «&» - это специальный символ для WinForms (и базового Win32 API), который / использовался для обозначения символа быстрого вызова для пунктов меню / диалога.

'& 'in strings не означает ничего особенного для C #, но если вы хотите поместить его в метку формы / диалогового окна, тогда вам нужно экранировать' & ', добавив еще один впереди.

Лично я хотел бысначала получите строку, как я действительно хотел, в своей «бизнес-логике», а затем экранируйте символы «&» как часть отображения строки в форме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...