C#で文字列の¥をエスケープする手間を省く
C#でファイルパスを文字列に入れるときに、¥マークを¥マークでエスケープしないとおかしなことになりますよね。そういう場合にエスケープしなくても良い方法があります。
目次
C#の文字列は2種類ある
コードのサンプルを見ていると、時々最初に@が付いている文字列を見たことありませんか。
- 標準リテラル文字列
エスケープ文字を埋め込む必要がある場合。0個以上の文字を2重引用符(ダブルクォーテーション)で囲んで指定する。例えば、
"Hello\n"
とか。- 逐次的リテラル文字列
文字列テキストに¥記号が含まれる場合。@文字、2重引用符(ダブルクォーテーション)、0個以上の文字、閉じる用の2重引用符で指定する。例えば、
@"Hello"
とか。文字列テキスト内に2重引用符が含まれる場合は、その2重引用符に2重引用符を付ける。
詳しくは、MSDNを参照してください。
逐次的リテラル文字列を試してみた
標準リテラル文字列と逐次的リテラル文字列を試してみましょう。下記のコンソールアプリを実行してみます。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace escape_trial
{
class Program
{
static void Main(string[] args)
{
string Text1 = "千早振る神代もきかず竜田川\n唐紅に水くくるとは"; // 標準リテラル文字列
string Text2 = @"千早振る神代もきかず竜田川\n唐紅に水くくるとは"; // 逐次的リテラル文字列
string Text3 = @"千早振る神代もきかず竜田川
唐紅に水くくるとは"; // 改行を含む逐次的リテラル文字列
string Text4 = @"千早振る神代もきかず""竜田川"" 唐紅に水くくるとは"; // 2重引用符を含む逐次的リテラル文字列
Console.WriteLine("標準リテラル文字列");
Console.WriteLine(Text1);
Console.WriteLine("\n逐次的リテラル文字列");
Console.WriteLine(Text2);
Console.WriteLine("\n改行を含む逐次的リテラル文字列");
Console.WriteLine(Text3);
Console.WriteLine("\n2重引用符を含む逐次的リテラル文字列");
Console.WriteLine(Text4);
Console.ReadKey(true);
}
}
}
\n
は改行コードです。エスケープ文字の一つですね。実行結果は下記のようになります。
標準リテラル文字列では\n
の位置で改行されました。逐次的リテラル文字列では\n
がそのまま文字として表示されました。逐次的リテラル文字列内で改行すると、その通りに表示されました。
公開日
広告