Web検索はbingがおすすめ!

エスケープ文字をそのまま文字列として表現する ("\" を"\\"表記せずに記述する) - 逐語的文字列リテラル (Verbitam Strings) を利用する - C#

C#でエスケープ文字をそのまま文字列として表現する場合の書式について紹介します。

概要

C#の文字列では、\n \t などのエスケープ シーケンスが設定されており、エスケープ シーケンスの文字列を記述することで、文字で表現できない、改行コードなどの制御コードを記述できます。(エスケープ文字についてはこちらの記事を参照してください。)
便利な機能ではありますが、文字列で "\n" 文字自体を表現する場合には"\"記号をエスケープする必要があり "\\n" と記述する必要があります。
エスケープする文字数が少ない場合は問題はほとんどありませんが、正規表現式など"\"を記述する文字の個数が多い場合、エスケープすることで文字列がわかりにくくなってしまうこともあります。
C#では逐語的リテラル文字列を利用すると、エスケープシーケンスの文字を記述した通りに文字列の値として設定できます。

書式

通常の文字列と同様にダブルクォート(")で囲みますが、先頭のダブルクォートの直前に@を記述します。
@"(文字列)"
補足
ダブルクォーテーション記号「"」を文字列中に記述する場合は 「""」と記述します。

記述例

string expression = @"AB\t\tCDE";

プログラム例 1

Windows Formアプリケーションを作成します。

UI

下図のフォームを作成します。複数行のテキストボックスをボタンを配置します。

コード

下記のコードを記述します。
配置したボタンのClickイベントを実装します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace StringBasics
{
  public partial class FormVerbitamStrings : Form
  {
    public FormVerbitamStrings()
    {
      InitializeComponent();
    }

    private void Button1_Click(object sender, EventArgs e)
    {
      string text1 = "商品リスト\r\n\tぺんぎんクッキー\r\n\tらくだキャラメル\r\n\tしろくまアイス\r\n\t\t終了";
      string text2 = @"商品リスト\r\n\tぺんぎんクッキー\r\n\tらくだキャラメル\r\n\tしろくまアイス\r\n\t\t終了";

      textBox1.Text += text1;
      textBox1.Text += "\r\n---\r\n";
      textBox1.Text += text2;
    }
  }
}

解説

"商品リスト\r\n\tぺんぎんクッキー\r\n\tらくだキャラメル\r\n\tしろくまアイス\r\n\t\t終了" の文字列を通常の文字列と、逐語的文字列リテラルで記述して、 テキストボックスに変数の値を表示します。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。下図の結果が表示されます。通常の文字列では \r\n は改行コードとなり改行され \t はタブ文字としてテキストボックスに表示されます。 一方、逐語的文字列リテラルで記述した文字列は \r\n\t は記述した文字の通りにテキストボックスに表示されます。

プログラム例 2

UI

Windows Formアプリケーションを作成し、下図のUIを作成します。フォームにボタンとMultilineプロパティをTrueに設定した、複数行テキストボックスを配置します。

コード

下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace StringBasics
{
  public partial class FormVerbitamStrings : Form
  {
    public FormVerbitamStrings()
    {
      InitializeComponent();
    }

    private void Button1_Click(object sender, EventArgs e)
    {
      string filepath;
      filepath = @"c:\Windows\WindowsUpdate.log";
      System.IO.StreamReader sr = new System.IO.StreamReader(filepath);
      textBox1.Text = sr.ReadToEnd();
    }
  }
}

解説

ボタンクリックにより処理が実行されます。最初の行で filepath という名称のstring変数を宣言します。2行目でfilepath変数に値を代入します。代入する値の文字列をVerbitam Strings で記述しています。
今回のコードの文字列を通常の文字列で表現する場合、
"c:\\Windows\\WindowsUpdate.log"
\記号を\\で記述する必要がありますが、Verbitam Strings を用いるとエスケープシーケンスが不要になり、\をそのまま記述できます。
3行目と4行目は、filepath変数に代入されたパスのファイルを開き、テキストボックスに表示するコードです。処理の詳細である、テキストファイルの読み込みに関してはこちらの記事を参照してください。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。コードに記述した、c:\Windows\WindowsUpdate.log ファイル読み込みテキストボックスにファイルの内容を表示します。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2019-05-04
改訂日: 2021-02-24
iPentec all rights reserverd.