C#で文字列の¥をエスケープする手間を省く

C#でファイルパスを文字列に入れるときに、¥マークを¥マークでエスケープしないとおかしなことになりますよね。そういう場合にエスケープしなくても良い方法があります。

目次

  1. C#の文字列は2種類ある
  2. 逐次的リテラル文字列を試してみた

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は改行コードです。エスケープ文字の一つですね。実行結果は下記のようになります。 151113-1-00 標準リテラル文字列では\nの位置で改行されました。逐次的リテラル文字列では\nがそのまま文字として表示されました。逐次的リテラル文字列内で改行すると、その通りに表示されました。

公開日

広告