2012-02-21 4 views
0

У меня есть следующая проблема с string.replace:String.Replace не работает, как ожидалось

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

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

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

Почему это?

+3

Вы показываете эту строку в приложении WinForms или WPF? – Yuck

+3

Не воспроизводимый. –

+2

Это работает для меня. Как вы его распечатываете? –

ответ

3

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

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

+0

Замечательно! Он работает нормально. Спасибо! – Atesh052

6

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

Таким образом, чтобы отобразить его в WinForms вы обязательно придется поместить два& символы в строке, как вы здесь:

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

Это строго WinForms «вещь» и не имеет никакого отношения к экранированию строки C# или .NET. Так было, по крайней мере, еще в Visual Basic 4 - вероятно, до этого.

+1

Вот как это делается работает в Win32. Все различные оболочки вокруг Win32 (VB 4, WinForms и т. Д.) Только что унаследовали это поведение. –

+0

Вот что я хотел знать. Благодаря! – Atesh052

1

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

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

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

Смежные вопросы