2015-01-23 2 views
1

내 코드에서 무슨 일이 일어 났는지 이해가 안됩니다.메서드 개체의 ToString()은 이스케이프 문자에 백 슬래시를 추가합니다.

나는 RadioButton을 포함하는 WrapPanel을 가지고 있습니다. Tag 속성을 사용하여 RadioButton의 Content 속성을 실제 문자와 연결합니다. 예 : 도표 = \ t.

<WrapPanel HorizontalAlignment="Left" Margin="43,24,0,21" Name="wpColSep" VerticalAlignment="Center" Width="286" Orientation="Horizontal" Height="58"> 
    <RadioButton Content="Tabulation" Height="16" Name="rbTab" Padding="6,0,20,0" Margin="0,0,0,7" Tag="\t" /> 
    <RadioButton Content="Espace" Height="16" Name="rbSpace" Padding="6,0,20,0" Margin="0,0,0,7" Tag=" " /> 
    <RadioButton Content="Point-virgule" Height="16" Name="rbPointVirgule" Padding="6,0,20,0" Margin="0,0,0,7" Tag=";" /> 
    <RadioButton Content="Virgule" Height="16" Name="rbVirgule" Margin="0,7,0,0" Padding="6,0,20,0" Tag="," /> 
    <RadioButton Content="Autre :" Height="16" Name="rbAutre" Margin="0,7,0,0" Padding="6,0,20,0" /> 
    <TextBox Height="23" Name="tbAutre" Width="41" Margin="0,10,0,0" Padding="6,0,20,0" /> 
</WrapPanel> 

그럼, 내가 체크 RadioButton를 얻을이 코드 Tag에 문자를 저장하려고 :

var rbChecked = wpColSep.ChildrenOfType<RadioButton>().Where(c => c.IsChecked ?? false).FirstOrDefault(); 
if (rbChecked == rbAutre && !String.IsNullOrEmpty(tbAutre.Text)) 
{ 
    //Not important here 
} 
else if (rbChecked != null) 
{ 
    ConfigImport.SeparateurColonne = rbChecked.Tag.ToString(); 
} 
else 
{ 
    //No RadioButton checked 
} 

이 완벽하게 작동하지만 때 Tag

는 XAML 부분입니다 = "\ t", 은 "\\ t"를 생성합니다.

이유는 무엇이며 어떻게 피할 수 있습니까?

미리 감사드립니다. 내 영어가 유감 스럽습니다.

+5

, 당신은 결과를보고있다 디버거에서? 디버거는 문자열 변수를 검사 할 때 특정 문자를 이스케이프하지만 시각적 인 것으로 문자열에 반드시 해당 문자가 포함되지는 않습니다. 이 방법을 다른 방법으로 확인하는 경우 방법을 알려주십시오. –

+1

@ LasseV.Karlsen 네,이 줄 뒤에 중단 점을 넣고'ConfigImport.SeparateurColonne'의 값을 봅니다. – Chostakovitch

+2

그렇다면 이것은 문제가되지 않습니다. 이것은 실제 문자열 내용이 아니라 디버거입니다. –

답변

3

아마도 디버거의 결과를보고있을 것입니다.

C#은 \, \t, \r\"과 같은 일부 문자를 이스케이프해야합니다. 디버거 콘솔에서 이스케이프 된 문자열을 볼 수 있습니다. 걱정하지 마세요, 실제 문자열은 괜찮습니다. 변수 옆에있는 돋보기를 클릭하면 실제 값이 표시됩니다. (string abc = "abc\\n"과 동일)

'잘못된'값 :

enter image description here

괜찮아 보이는 :

이를 확인하려면 어떻게해야

enter image description here

+0

안녕하세요, 감사합니다. 실제로 텍스트 시각화 기능으로 잘 작동합니다. 다음 작은 것은'ConfigImport.SeparateurColonne'을'MessageBox'에 보여 주려고 할 때 말 그대로'\ t'를 출력한다는 것입니다. 이 문자열을 * 문자열 리터럴 *으로 간주하지 않는 방법은 무엇입니까? – Chostakovitch

+0

'ConfigImport.SeparateurColonne'이란 무엇입니까? 'rbChecked.Tag'의 가치는 무엇입니까? 어떻게 채워지나요? –

+0

내 코드에서 알 수 있듯이 다음과 같이 채워집니다 :'ConfigImport.SeparateurColonne = rbChecked.Tag.ToString();'. Text Visualizer에서는 실제 표를 보여 주지만'MessageBox'에서는 * \ t *를 표시합니다. 이상하게도 MessageBox.Show ("\ t")'는 실제 탭을 보여줍니다. – Chostakovitch

관련 문제