2013-02-15 3 views
7

に文字列の末尾に\記号を追加することができます。は、どのように私は初心者の質問:)</p> <pre><code>string S="abc"; S+=""; </code></pre> <p>がcomplileません許してくださいC#の

string S="abc"; 
S+="\\"; 

Sは= "ABC \\"

ようになりますどのように私はSが= "ABCの\" することができますか?

+0

\の代わりに\ u005cを使用してください。 – Rahil2952

+2

2番目の例が正しいです。ウォッチウィンドウでS = "abc \\"と表示されるかもしれませんが、IDEが賢明で文字列の文字をエスケープしているだけです(同様に、文字列に改行文字があった場合、ウォッチウィンドウに "foo \ nbar ") –

+1

@RossMcNab、あなたはそれを答えるべきです。 – Mizipzor

答えて

5

これを試してみてください:

String S = "abc"; 
S += @"\"; 

@ =逐語的文字列リテラル

http://msdn.microsoft.com/en-us/library/aa691090%28v=vs.71%29.aspx

http://msdn.microsoft.com/en-us/library/vstudio/362314fe.aspx

+1

これは、OPの2番目のスニペットとまったく同じコードであり、何が起こっているのかについては説明していません。 –

+1

合意 - OPはバックスラッシュ文字をエスケープできないと懸念しています。 2番目の例は正しいですが、ビジュアルスタジオのデバッガはスラッシュがまだ文字列に存在することを示しています(そうでない場合)。 – RainbowFish

13

コードのあなたの第二の部分は何をしたいである(または逐語的文字列リテラル@"\"が提案しているように)、i tは単一のバックスラッシュを追加するだけです - コンソールに出力してください。

コードのこれら2枚:

S += "\\"; 

S += @"\"; 

正確同等です。いずれの場合も、単一のバックスラッシュにはが追加されます。

バックスラッシュ(およびその他の文字)をエスケープするデバッガビューで混乱しているように思えます。あなたはそれも、あなたが表示されますS.Lengthを見て、デバッガ、とそれは既存の文字列内のデータを変更しないことを4ではなく5


注であることを検証することができますが、 Sの値をの新しい文字列を参照するように設定します。この文字列は、最後にバックスラッシュを付けた元の文字列で構成されます。 .NETのStringオブジェクトは不変ですが、それは他のトピック全体です...

2

既に解決策があります。 VSがバックスラッシュをエスケープするため、デバッグ中にabc\\と表示される理由は、Sの値をコンソールウィンドウに出力すると、abc\が表示されます。 @を文字列リテラルの先頭に追加することができます。

string S="abc"; 
S+= @"\"; 

これは同じことを達成します。

+0

これは 'S + =" \\ ";'とまったく同じ効果があります。同じ結果を得るための別の方法を与えるだけでは、私の見解ではOPを助けません。 –

+0

もう少し説明して編集しました。 – DGibbs

1

あなたは、@文字でバックスラッシュをエスケープすることができます

string S="abc"; 
S += @"\"; 

しかし、これはあなたの第二の例で書いたまさに実現しています。この混乱は、ソース文字列にバックスラッシュが1つしか含まれていなくても、Visual Studioデバッガがこれらの文字をエスケープし続けるという事実に起因しています。

+0

これは、OPの2番目のコードと同じ結果を達成する別の方法を提供しています...デバッガでOPが何を見ているのかを説明せずに混乱を招くことがあります。 –

4
string S = "abs" + "\\"; 

結果はabc\である必要があります。

おそらく、デバッガ/インテリセンスが文字列を視覚化する方法です。 文字列をコンソールに印刷するか、テキストボックスに表示してみてください。

1

あなたの第二の例では、結果の文字列に2つのスラッシュを参照してください理由です、

string S="abc"; 
S+="\\"; 

のVisual Studioが表示された文字列はエスケープ完全に罰金です。あなたはこの

@"\" 

のようにエスケープ宣言文字列を使用しない場合、コンパイラは文字を期待しているので、これはエスケープ記号の後

string S="abc"; 
S+="\"; 
-2

をコンパイルされていないこの

string s="abc"; 
s = s+"\\"; 
+0

コンパイルされません。 – DGibbs

+0

私は私の例とその動作を試しました。 – Utkarsh

+2

@Utkarsh:私はあなたが持っていないと確信しています。あなたは変数 's'を宣言していません。 –

0
string S="abc"; 
S+="\\"; 
Console.WriteLine(S); // This is what you're missing ;) 
をお試しください

文字列がまったく間違っていないことがわかります。

バックスラッシュ(\)はエスケープ文字である、とあなたは、このようなNewLine文字を表し"\r\n"、または基本的に与え"\""として、あなたが通常の文字列に挿入することができない特殊文字を、取得することができますあなたは"文字です。

\文字を取得するには、あなたがしていることとあなたが望むものを正確に入力して"\\"を入力する必要があります。逐語的な(@)を使用して

は、\\にそう@"\" == "\\"\のすべての出現を置き換えます。これは通常、パスと正規表現に使用されます。ここでは、リテラル\が必要です。結局、@"C:\MyDirectory\MyFile"と言っても"C:\\MyDirectory\\MyFile"よりも快適です。

関連する問題

 関連する問題