初心者の質問はご容赦ください:)
string S="abc";
S+="\";
準拠しません。
string S="abc";
S+="\\";
S ="abc\\"になります
S = "abc \"を作成するにはどうすればよいですか?
2番目のコードは@"\"
必要なもの(または他の人が提案している逐語的な文字列リテラル)であり、バックスラッシュを1つだけ追加します。コンソールに印刷すると表示されます。
これらの2つのコード:
S += "\\";
と
S += @"\";
まったく同じです。どちらの場合も、1つの円記号が追加されます1。
バックスラッシュ(およびその他の文字)をエスケープするデバッガービューに混乱しているのではないかと思います。デバッガーを使用しても、を確認することで検証できS.Length
ます。これは、5ではなく4であることがわかります。
1既存の文字列のデータは変更されませんが、の値を設定して、末尾に円記号が付いた元の文字列で構成される新しいS
文字列を参照することに注意してください。.NETの文字列オブジェクトは不変ですが、それはまったく別のトピックです...
これを試して:
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
string S = "abs" + "\\";
べきであり、結果はabc\
です。
おそらく表示されているのは、デバッガー/インテリセンスが文字列を視覚化する方法です。文字列をコンソールに出力するか、テキストボックスに表示してみてください。
あなたはすでに解決策を持っています。abc\\
デバッグ中に表示される理由は、VSがバックスラッシュをエスケープし、の値をS
コンソールウィンドウに出力すると、が表示されるためabc\
です。@
文字列リテラルの先頭にを追加できます。例:
string S="abc";
S+= @"\";
これは同じことを達成します。
@文字を使用してバックスラッシュをエスケープできます。
string S="abc";
S += @"\";
しかし、これは2番目の例で書いたことを正確に達成します。これに関する混乱は、ソース文字列に円記号が1つしか含まれていない場合でも、VisualStudioデバッガーがこれらの文字をエスケープし続けるという事実に起因しています。
あなたの2番目の例は完全に問題ありません
string S="abc";
S+="\\";
Visual Studio では文字列がエスケープされて表示されるため、結果文字列に 2 つのスラッシュが表示されます。このようなエスケープ宣言文字列を使用したくない場合
@"\"
コンパイラはエスケープ記号の後に文字を期待しているため、これはコンパイルされていません
string S="abc";
S+="\";
string S="abc";
S+="\\";
Console.WriteLine(S); // This is what you're missing ;)
文字列がまったく間違っていないことがわかります。
バックスラッシュ ( ) はエスケープ文字であり、文字を表す、または基本的に文字を与える\
など、通常は文字列に挿入できない特殊文字を取得できます。"\r\n"
NewLine
"\""
"
キャラクターを取得するには、正確に何をしているのか、何をしたいのかを\
入力する必要があります。"\\"
verbatim( @
) を使用すると、すべての出現箇所が\
into\\
に置き換えられ@"\" == "\\"
ます。これは通常、多数のリテラル\
が必要なパスと正規表現に使用されます。と言う方がやっぱり@"C:\MyDirectory\MyFile"
気持ちいいです。"C:\\MyDirectory\\MyFile"
これを試して
string s="abc";
s = s+"\\";