Uenishi.Web

大阪に生息しているプログラマーのブログ

C#での文字列の扱い方いろいろ

概要

C#で文字列を扱う際、通常のダブルクォーテーション「””」で囲う以外にもさまざまな記法があるので、忘備録としてまとめておきます。

文字列の前に「@」をつける

逐語的リテラル文字列と呼ばれる。

文字列を囲うダブルクォーテーションの前に「@」をつけることで、以下のように複数行の文字列が表現可能です。

var str = @"SELECT *
						FROM hoge h
						INNER JOIN piyo p
						ON h.id = p.id
						WHERE h.id = 1";
文字列の前に「$」をつける

C#6.0から追加された機能。

文字列補完式と呼ばれている。

「@」ではなく「$」を使うと、文字列の中に変数を埋め込むことができます。

var huga = "ほああああああ";

console.log($"こんにちは。お元気ですか{huga}!");

出力

こんにちは。お元気ですかほああああああ!

この記述方法を「文字列補完式」と呼びます。

「$、@」を複合して使う
public class Test{
    public static void Main(){
        var name = "田中";

        var text = $@"こんにちは。僕は{name}です。
						            よろしくお願いします。";
        System.Console.WriteLine("{0}", text);
    }
}

出力

こんにちは。僕は田中です。
よろしくお願いします。
StringBuilderを使う

現場に入って、はじめにアプリ側でSQLを生成する処理を見たときは、このStringBuilderクラスのAppendLineメソッドが使われていました。

var sql = new StringBuilder();
sql.AppendLine(" SELECT");
sql.AppendLine("   id");
sql.AppendLine("  ,name");
sql.AppendLine(" FROM");
sql.AppendLine("   hoge h");
sql.AppendLine(" WHERE 1=1");
sql.AppendLine(string.Format("   AND h.id   = {0}", id));
sql.AppendLine(string.Format("   AND h.name = '{0}'", name));

上記のようなSQLは、@や$を使用することで以下のように書けます。

SutringBuilderで記述するよりも可読性が非常に上がり、より自然な形でSQLが読み取れる様になりました。

string sql = $@"
 SELECT
   id
   , name
 FROM
   hoge h
 WHERE 1=1
   AND h.id   = '{id}'
   AND h.name = {name}
";

パフォーマンス的にどう違ってくるのだろうと気になるところなので、また後日調べて投稿しようと思います。