変数

【C#】文字列エスケープの基本と応用をやさしく完全解説

C#の文字列は\n\"などのエスケープシーケンスで改行・特殊文字を埋め込みます。

ただしバックスラッシュが増えると読みづらくなります。

@を付けた逐語的リテラルなら\をそのまま書けるためファイルパスや複数行のテキストに最適です。

さらに$@""とすれば補間と非エスケープを両立できるので、目的に合わせて通常リテラルと切り替えることがトラブル防止と保守性向上につながります。

文字列リテラルのバリエーション

C#では文字列を表現する方法がいくつかあります。

用途や状況に応じて使い分けることで、コードの可読性や保守性が向上します。

ここでは代表的な文字列リテラルの種類と特徴を詳しく解説します。

通常リテラル

基本構文

通常リテラルは、ダブルクォーテーション"で囲んだ文字列を表します。

文字列内に特殊文字や制御文字を含めたい場合は、エスケープシーケンスを使います。

例えば、改行やタブ、ダブルクォーテーション自体を文字列に含める場合です。

using System;
class Program
{
    static void Main()
    {
        // 通常リテラルの例:改行とダブルクォーテーションを含む文字列
        string message = "彼は言った: \"こんにちは!\"\n新しい行です。";
        Console.WriteLine(message);
    }
}
彼は言った: "こんにちは!"
新しい行です。

この例では、\"でダブルクォーテーションを文字列内に含め、\nで改行を表現しています。

通常リテラルは最も基本的な文字列の書き方で、ほとんどのケースで使われます。

代表的なエスケープシーケンス

通常リテラル内で使われる主なエスケープシーケンスは以下の通りです。

エスケープシーケンス意味
\"ダブルクォーテーション"彼は言った: \"こんにちは!\""
\\バックスラッシュ"C:\\Users\\Name"
\n改行(ラインフィード)"1行目\n2行目"
\rキャリッジリターン"\r\n"(Windowsの改行)
\t水平タブ"項目1\t項目2"
\uXXXXUnicodeコードポイント"\u00A9"(©)
\0Null文字"終端\0文字"

これらを使うことで、文字列内に特殊な文字を安全に埋め込めます。

逐語的リテラル @

構文と特徴

逐語的文字列リテラルは、文字列の前に@を付けて書きます。

これにより、エスケープシーケンスが無効化され、文字列内のバックスラッシュや改行がそのまま文字列として扱われます。

複数行の文字列やファイルパスの記述に便利です。

using System;
class Program
{
    static void Main()
    {
        // 逐語的リテラルの例:複数行文字列
        string multiLine = @"これは
複数行の
文字列です。";
        Console.WriteLine(multiLine);
    }
}
これは
複数行の
文字列です。

このように、改行もそのまま文字列に含まれます。

また、バックスラッシュもエスケープ不要で書けます。

ファイルパス記述

Windowsのファイルパスはバックスラッシュが多用されるため、通常リテラルで書くとエスケープが煩雑になります。

逐語的リテラルを使うと簡潔に書けます。

using System;
class Program
{
    static void Main()
    {
        // 通常リテラルでのファイルパス(エスケープが必要)
        string path1 = "C:\\Users\\Name\\Documents\\file.txt";
        // 逐語的リテラルでのファイルパス(エスケープ不要)
        string path2 = @"C:\Users\Name\Documents\file.txt";
        Console.WriteLine(path1);
        Console.WriteLine(path2);
    }
}
C:\Users\Name\Documents\file.txt
C:\Users\Name\Documents\file.txt

逐語的リテラルはファイルパスや正規表現パターンなど、バックスラッシュが多い文字列に特に適しています。

補間リテラル $

変数埋め込み

補間リテラルは、文字列の前に$を付けて書き、文字列内に変数や式を埋め込めます。

埋め込み部分は{}で囲みます。

これにより、文字列連結よりも読みやすく直感的なコードが書けます。

using System;
class Program
{
    static void Main()
    {
        string name = "太郎";
        int age = 25;
        // 補間リテラルで変数を埋め込む
        string greeting = $"こんにちは、{name}さん!あなたは{age}歳です。";
        Console.WriteLine(greeting);
    }
}
こんにちは、太郎さん!あなたは25歳です。

変数だけでなく、式も埋め込めます。

int x = 5;
int y = 3;
string result = $"合計は {x + y} です。";
Console.WriteLine(result);
合計は 8 です。

書式指定

補間リテラル内では、埋め込み部分に書式指定も可能です。

コロン:の後に書式を指定します。

using System;
class Program
{
    static void Main()
    {
        double price = 1234.5678;
        // 小数点以下2桁まで表示
        string formatted = $"価格は {price:F2} 円です。";
        Console.WriteLine(formatted);
        DateTime now = DateTime.Now;
        // 日付の書式指定
        string dateStr = $"現在日時: {now:yyyy/MM/dd HH:mm:ss}";
        Console.WriteLine(dateStr);
    }
}
価格は 1234.57 円です。
現在日時: 2024/06/01 14:30:45

このように、数値や日時のフォーマットを簡単に指定できるのも補間リテラルの強みです。

複合リテラル @/@

利点と注意点

補間リテラルと逐語的リテラルは組み合わせて使えます。

$@または@$のどちらでも構いません。

これにより、複数行の文字列に変数埋め込みが可能になります。

using System;
class Program
{
    static void Main()
    {
        string name = "花子";
        string multiLine = $@"こんにちは、{name}さん。
これは複数行の
文字列です。";
        Console.WriteLine(multiLine);
    }
}
こんにちは、花子さん。
これは複数行の
文字列です。

利点

  • 複数行の文字列をそのまま書ける
  • 変数や式を埋め込める
  • バックスラッシュのエスケープが不要
  • 文字列内でダブルクォーテーションを含める場合は、逐語的リテラルのルールに従い、""(ダブルクォーテーション2つ)で表現します
string quote = $@"彼は言った: ""こんにちは、{name}さん!""";
Console.WriteLine(quote);
彼は言った: "こんにちは、花子さん!"
  • $@@$はどちらでも動作しますが、慣例的に$@がよく使われます

Raw String Literal(C# 11以降)

C# 11から導入されたRaw String Literalは、複雑な文字列をより簡単に記述できる新しい文字列リテラルです。

三重以上のダブルクォーテーションで囲み、エスケープシーケンスを一切使わずに文字列を表現できます。

三重クォート表記

Raw String Literalは、3つ以上の連続したダブルクォーテーション"""で囲みます。

囲みの数は文字列内に含まれるダブルクォーテーションの数に応じて増やせます。

using System;
class Program
{
    static void Main()
    {
        // Raw String Literalの例(3つのダブルクォーテーションで囲む)
        string raw = """
            これはRaw String Literalです。
            "ダブルクォーテーション"もそのまま書けます。
            改行もそのまま反映されます。
            """;
        Console.WriteLine(raw);
    }
}
これはRaw String Literalです。
"ダブルクォーテーション"もそのまま書けます。
改行もそのまま反映されます。

ヒアドキュメント風利用

Raw String Literalは複数行の文字列をインデントを含めてそのまま記述できるため、ヒアドキュメントのように使えます。

インデントは囲みの開始位置に合わせて自動的に調整されます。

using System;
class Program
{
    static void Main()
    {
        string json = """
            {
                "name": "太郎",
                "age": 30,
                "skills": [
                    "C#",
                    "SQL",
                    "JavaScript"
                ]
            }
            """;
        Console.WriteLine(json);
    }
}
{
    "name": "太郎",
    "age": 30,
    "skills": [
        "C#",
        "SQL",
        "JavaScript"
    ]
}

Raw String Literalは、JSONやXML、SQLクエリなどの複雑な文字列をそのまま書きたい場合に非常に便利です。

エスケープの煩わしさから解放され、コードがすっきりします。

これらの文字列リテラルの種類を理解し、適切に使い分けることで、C#の文字列操作がより効率的で読みやすくなります。

用途に応じて使い分けてみてください。

主要エスケープシーケンス

改行とキャリッジリターン \n \r

改行を表すエスケープシーケンスには主に\n\rがあります。

\nはラインフィード(LF)で、Unix系OSやLinux、macOSでの改行コードとして使われます。

一方、\rはキャリッジリターン(CR)で、古いMac OSで使われていました。

Windowsでは通常、\r\nの組み合わせで改行を表します。

using System;
class Program
{
    static void Main()
    {
        // \r\nを使ったWindowsスタイルの改行
        string windowsNewLine = "1行目\r\n2行目";
        Console.WriteLine(windowsNewLine);
        // \nだけの改行(Unixスタイル)
        string unixNewLine = "1行目\n2行目";
        Console.WriteLine(unixNewLine);
        // \rだけの改行(古いMacスタイル)
        string macNewLine = "1行目\r2行目";
        Console.WriteLine(macNewLine);
    }
}
1行目
2行目
1行目
2行目
1行目2行目
※環境により出力が異なる場合があります

最後の\rだけの改行は、コンソールでは改行として認識されず、2行目の文字が1行目の先頭に上書きされることがあります。

通常は\n\r\nを使うのが一般的です。

水平タブ \t とバックスペース \b

水平タブは\tで表し、文字列内にタブ幅の空白を挿入します。

バックスペースは\bで、カーソルを1文字分戻しますが、コンソール出力では挙動が環境によって異なることがあります。

using System;
class Program
{
    static void Main()
    {
        // 水平タブで列を揃える例
        string tabExample = "名前\t年齢\t職業\n太郎\t25\tエンジニア\n花子\t30\tデザイナー";
        Console.WriteLine(tabExample);
        // バックスペースで文字を消す例(コンソールによっては効果が見えにくい)
        string backspaceExample = "Hello\b World";
        Console.WriteLine(backspaceExample);
    }
}
名前    年齢    職業
太郎    25      エンジニア
花子    30      デザイナー
Hello World

バックスペース\bは文字を消す効果が期待されますが、コンソールの種類や環境によってはそのまま表示されることもあります。

文字列操作で確実に文字を削除したい場合は、文字列の編集処理を行うほうが安全です。

クォート ” とバックスラッシュ \

文字列内にダブルクォーテーションやバックスラッシュを含める場合は、それぞれ\"\\でエスケープします。

これをしないと文字列の終端やエスケープ文字として誤解され、コンパイルエラーや意図しない動作になります。

using System;
class Program
{
    static void Main()
    {
        // ダブルクォーテーションを含む文字列
        string quote = "彼は言った: \"こんにちは!\"";
        Console.WriteLine(quote);
        // バックスラッシュを含むファイルパス
        string path = "C:\\Program Files\\MyApp\\app.exe";
        Console.WriteLine(path);
    }
}
彼は言った: "こんにちは!"
C:\Program Files\MyApp\app.exe

逐語的リテラル@を使うとバックスラッシュのエスケープは不要ですが、ダブルクォーテーションは""と2つ重ねて書く必要があります。

Unicodeコードポイント \u \U

Unicode文字を直接文字列に埋め込むには\u\Uを使います。

\uは4桁の16進数で、基本多言語面(BMP)の文字を表します。

\Uは8桁の16進数で、サロゲートペアを含む補助面の文字も表現可能です。

using System;
class Program
{
    static void Main()
    {
        // ©マーク(U+00A9)をUnicodeエスケープで表現
        string copyright = "\u00A9 2024 MyCompany";
        Console.WriteLine(copyright);
        // 補助面の絵文字(U+1F600:😀)を\Uで表現
        string emoji = "\U0001F600";
        Console.WriteLine($"絵文字: {emoji}");
    }
}
© 2024 MyCompany
絵文字: 😀

サロゲートペアの扱い

Unicodeのコードポイントは最大で0x10FFFFまでありますが、\uは4桁(16ビット)なのでBMPの文字しか表せません。

BMP外の文字はサロゲートペアという2つの16ビットコードユニットで表現されます。

\Uは8桁でこれを直接指定できるため、絵文字や特殊文字の表現に便利です。

サロゲートペアを手動で扱う場合は、2つの\uエスケープを連続して書くことも可能ですが、\Uのほうが簡潔です。

// サロゲートペアを2つの\uで表現(U+1F600)
string surrogatePair = "\uD83D\uDE00";

この文字列は\U0001F600と同じ絵文字を表します。

可変長16進数 \x

\xは可変長の16進数エスケープシーケンスで、1桁から4桁までの16進数を指定できます。

\uと異なり、桁数を柔軟に指定できるため、短いコードポイントを簡単に書けます。

using System;
class Program
{
    static void Main()
    {
        // \xで©マーク(U+00A9)を表現(4桁)
        string copyright1 = "\x00A9 2024 MyCompany";
        // \xで改行(U+000A)を表現(2桁)
        string newLine = "1行目\x0A2行目";
        // \xで文字'A'(U+0041)を表現(2桁)
        string letterA = "\x41";
        Console.WriteLine(copyright1);
        Console.WriteLine(newLine);
        Console.WriteLine(letterA);
    }
}
© 2024 MyCompany
1行目
2行目
A

\xは4桁まで指定可能ですが、4桁未満の場合は次の文字が16進数として解釈されることがあるため、意図しない文字列になることがあります。

例えば、\x41B'A'(0x41)と'B'の連続ではなく、0x41B(Unicodeの1文字)として解釈されます。

必要に応じて文字列を分けるか、\uを使うと安全です。

応用テクニック

ファイルパスの安全生成

Windows環境でファイルパスを文字列として扱う際、バックスラッシュ\が多用されるため、エスケープが煩雑になりがちです。

逐語的文字列リテラル@を使うと、バックスラッシュのエスケープが不要になり、コードが読みやすくなります。

using System;
class Program
{
    static void Main()
    {
        // 通常リテラルでのファイルパス(エスケープが必要)
        string path1 = "C:\\Users\\Taro\\Documents\\report.txt";
        // 逐語的リテラルでのファイルパス(エスケープ不要)
        string path2 = @"C:\Users\Taro\Documents\report.txt";
        Console.WriteLine(path1);
        Console.WriteLine(path2);
    }
}
C:\Users\Taro\Documents\report.txt
C:\Users\Taro\Documents\report.txt

また、Path.Combineメソッドを使うことで、OSに依存しない安全なパス結合が可能です。

これと逐語的リテラルを組み合わせると、より堅牢なファイルパス生成ができます。

using System;
using System.IO;
class Program
{
    static void Main()
    {
        string folder = @"C:\Users\Taro\Documents";
        string fileName = "report.txt";
        string fullPath = Path.Combine(folder, fileName);
        Console.WriteLine(fullPath);
    }
}
C:\Users\Taro\Documents\report.txt

ファイルパスを文字列で直接書く場合は逐語的リテラルを使い、動的に生成する場合はPath.Combineを活用すると安全です。

JSON文字列の構築

JSON文字列を手動で作成する際は、ダブルクォーテーションや改行、バックスラッシュのエスケープに注意が必要です。

逐語的リテラルやRaw String Literalを使うと、エスケープの手間を減らせます。

using System;
class Program
{
    static void Main()
    {
        // 逐語的リテラルでJSON文字列を作成
        string json1 = @"{
    ""name"": ""太郎"",
    ""age"": 30,
    ""skills"": [""C#"", ""SQL"", ""JavaScript""]
}";
        Console.WriteLine(json1);
    }
}
{
    "name": "太郎",
    "age": 30,
    "skills": ["C#", "SQL", "JavaScript"]
}

C# 11以降ではRaw String Literalを使うとさらに簡潔に書けます。

using System;
class Program
{
    static void Main()
    {
        string json2 = """
        {
            "name": "太郎",
            "age": 30,
            "skills": ["C#", "SQL", "JavaScript"]
        }
        """;
        Console.WriteLine(json2);
    }
}
{
    "name": "太郎",
    "age": 30,
    "skills": ["C#", "SQL", "JavaScript"]
}

ただし、JSONの構築は手動よりもSystem.Text.JsonNewtonsoft.Jsonなどのライブラリを使うほうが安全で効率的です。

SQLクエリ埋め込み

SQLクエリ文字列をコード内に埋め込む場合、シングルクォーテーションや改行、バックスラッシュのエスケープが必要です。

逐語的リテラルやRaw String Literalを使うと、可読性が向上します。

using System;
class Program
{
    static void Main()
    {
        string tableName = "Users";
        string sql1 = @"SELECT * FROM " + tableName + " WHERE Name = '太郎' AND Age > 20";
        Console.WriteLine(sql1);
    }
}
SELECT * FROM Users WHERE Name = '太郎' AND Age > 20

Raw String Literalを使うと複数行のクエリも見やすく書けます。

using System;
class Program
{
    static void Main()
    {
        string sql2 = $"""
            SELECT *
            FROM Users
            WHERE Name = '太郎'
              AND Age > 20
            ORDER BY Age DESC
            """;
        Console.WriteLine(sql2);
    }
}
SELECT *
FROM Users
WHERE Name = '太郎'
  AND Age > 20
ORDER BY Age DESC

ただし、SQLインジェクション対策として、文字列連結でクエリを組み立てるのは避け、パラメータ化クエリを使うことが推奨されます。

正規表現パターン

正規表現パターンはバックスラッシュが多用されるため、エスケープが複雑になりやすいです。

逐語的リテラルを使うとバックスラッシュのエスケープが不要になり、パターンが読みやすくなります。

using System;
using System.Text.RegularExpressions;
class Program
{
    static void Main()
    {
        // 通常リテラルでの正規表現パターン(バックスラッシュを2回エスケープ)
        string pattern1 = "\\d{3}-\\d{4}";
        // 逐語的リテラルでの正規表現パターン(エスケープ不要)
        string pattern2 = @"\d{3}-\d{4}";
        string input = "電話番号は123-4567です。";
        Console.WriteLine(Regex.IsMatch(input, pattern1)); // True
        Console.WriteLine(Regex.IsMatch(input, pattern2)); // True
    }
}
True
True

ダブルエスケープ対策

正規表現のバックスラッシュは、C#の通常リテラル内でさらにエスケープが必要なため、\\と2重に書く必要があります。

これを避けるために逐語的リテラル@を使うのが一般的です。

また、Raw String Literal(C# 11以降)を使うと、さらにエスケープが不要になり、複雑なパターンも直感的に書けます。

using System;
using System.Text.RegularExpressions;
class Program
{
    static void Main()
    {
        // Raw String Literalでの正規表現パターン
        string pattern = """
            \d{3}-\d{4}
            """;
        string input = "電話番号は123-4567です。";
        Console.WriteLine(Regex.IsMatch(input, pattern)); // True
    }
}
True

このように、正規表現パターンのエスケープは逐語的リテラルやRaw String Literalを活用することで、コードの可読性と保守性が大きく向上します。

トラブルシューティング

不正なエスケープシーケンス

C#の文字列リテラル内で使えるエスケープシーケンスは決まっています。

存在しないエスケープシーケンスを使うとコンパイルエラーになります。

例えば、\q\zなどは無効です。

using System;
class Program
{
    static void Main()
    {
        // 不正なエスケープシーケンス \q を使うとコンパイルエラーになる
        // string invalid = "これは不正なエスケープシーケンス: \q"; // エラー
        // 正しくはバックスラッシュを2つ書くか逐語的リテラルを使う
        string valid1 = "これは正しいバックスラッシュ: \\q";
        string valid2 = @"これは正しいバックスラッシュ: \q";
        Console.WriteLine(valid1);
        Console.WriteLine(valid2);
    }
}
これは正しいバックスラッシュ: \q
これは正しいバックスラッシュ: \q

不正なエスケープシーケンスは、バックスラッシュの直後に有効な文字が続いていない場合に起こります。

バックスラッシュを文字として使いたい場合は、\\と書くか、逐語的リテラル@を使いましょう。

クォートの未閉じ

文字列リテラルの開始と終了のダブルクォーテーションが対応していないと、コンパイルエラーになります。

特に文字列内にダブルクォーテーションを含める場合は、エスケープが必要です。

using System;
class Program
{
    static void Main()
    {
        // クォート未閉じの例(コンパイルエラー)
        // string error = "これは未閉じの文字列;
        // 正しい例:ダブルクォーテーションをエスケープ
        string correct = "彼は言った: \"こんにちは!\"";
        Console.WriteLine(correct);
    }
}
彼は言った: "こんにちは!"

逐語的リテラルを使う場合は、文字列内のダブルクォーテーションを""(ダブルクォーテーション2つ)で表現します。

string verbatim = @"彼は言った: ""こんにちは!""";
Console.WriteLine(verbatim);
彼は言った: "こんにちは!"

クォートの未閉じはエディタのシンタックスハイライトやコンパイラのエラーメッセージで気づきやすいですが、注意が必要です。

改行コード混在

Windowsでは改行コードが\r\n、Unix系では\n、古いMacでは\rが使われます。

異なる改行コードが混在すると、文字列の表示やファイルの読み書きで意図しない動作が起こることがあります。

using System;
class Program
{
    static void Main()
    {
        // 改行コードが混在した文字列
        string mixedNewLine = "1行目\r\n2行目\n3行目\r4行目";
        Console.WriteLine(mixedNewLine);
    }
}
1行目
2行目
3行目
4行目

コンソールでは問題なく表示されることが多いですが、ファイルやネットワーク通信で改行コードの違いが問題になることがあります。

改行コードを統一したい場合は、string.Replaceで置換する方法があります。

string normalized = mixedNewLine.Replace("\r\n", "\n").Replace("\r", "\n");

また、.NETEnvironment.NewLineを使うことで、実行環境に適した改行コードを利用できます。

Null文字

Null文字 \0 関連の落とし穴

関連の落とし穴

\0はNull文字(ヌル文字)を表します。

C言語などでは文字列の終端を示すために使われますが、C#の文字列はヌル文字を含めることができます。

ただし、ヌル文字が含まれると文字列操作や外部APIとの連携で予期せぬ動作を引き起こすことがあります。

using System;
class Program
{
    static void Main()
    {
        // Null文字を含む文字列
        string withNull = "abc\0def";
        Console.WriteLine($"文字列の長さ: {withNull.Length}");
        Console.WriteLine(withNull);
    }
}
文字列の長さ: 7
abcdef

コンソールに表示するとヌル文字は見えませんが、文字列の長さにはカウントされています。

ヌル文字以降の文字も正常に扱われます。

ただし、C#の文字列をC言語のAPIやファイルフォーマットに渡す場合、ヌル文字で文字列が途中で切られることがあります。

意図しないヌル文字が混入しないよう注意が必要です。

また、文字列の比較や検索でヌル文字があると結果が変わることもあります。

ヌル文字を含む文字列を扱う場合は、処理の影響範囲をよく確認してください。

コーディングスタイル指針

可読性優先の書き分け

文字列リテラルの書き方は複数ありますが、可読性を最優先に考えて使い分けることが大切です。

例えば、ファイルパスや正規表現のようにバックスラッシュが多い文字列は、逐語的リテラル@を使うとエスケープが不要になり読みやすくなります。

string path = @"C:\Users\Taro\Documents\file.txt";
string regex = @"^\d{3}-\d{4}$";

一方、変数や式を埋め込みたい場合は補間リテラル$を使います。

複数行かつ補間が必要な場合は複合リテラル$@を使うと見やすくなります。

string name = "花子";
string message = $@"こんにちは、{name}さん。
これは複数行のメッセージです。";

C# 11以降はRaw String Literalも活用できます。

特に複雑なJSONやSQLクエリなどはRaw String Literalで書くとエスケープ不要で直感的です。

string json = """
{
    "name": "太郎",
    "age": 30
}
""";

このように、用途や文字列の内容に応じてリテラルの種類を使い分けることで、コードの可読性と保守性が向上します。

一貫した改行コード管理

改行コードは環境によって異なり、Windowsは\r\n、Unix系は\nが一般的です。

プロジェクト内で改行コードが混在すると、差分管理やビルド時に問題が発生することがあります。

Visual StudioやVSCodeなどのエディタでは、改行コードの統一設定が可能です。

プロジェクト全体で一貫した改行コードを使うように設定しましょう。

コード内で改行コードを明示的に使う場合は、Environment.NewLineを利用すると実行環境に適した改行コードが自動的に使われます。

string message = "1行目" + Environment.NewLine + "2行目";
Console.WriteLine(message);

また、文字列の改行コードを統一したい場合は、string.Replaceで置換する方法もあります。

string normalized = input.Replace("\r\n", "\n").Replace("\r", "\n");

改行コードの一貫管理は、チーム開発やクロスプラットフォーム対応で特に重要です。

コンパイラ警告の活用

C#のコンパイラは文字列リテラルに関する警告も出すことがあります。

例えば、不正なエスケープシーケンスや未使用の変数、長すぎる文字列リテラルなどです。

これらの警告を無視せず、早期に修正することでバグを防げます。

Visual Studioや他のIDEでは、警告を一覧で確認でき、コードの問題箇所に直接ジャンプできます。

警告を活用してコード品質を保ちましょう。

また、#nullable enable#pragma warningなどのディレクティブを使い、警告の管理や制御も可能です。

ただし、警告を無効化する場合は理由を明確にし、必要最低限に留めることが望ましいです。

#pragma warning disable CS0168 // 変数が宣言されているが使用されていません
string unused = "未使用の文字列";
#pragma warning restore CS0168

コンパイラ警告はコードの安全性や保守性を高める重要なツールなので、積極的に活用してください。

まとめ

この記事では、C#の文字列エスケープの基本から応用まで幅広く解説しました。

通常リテラルや逐語的リテラル、補間リテラル、Raw String Literalの使い分けや、主要なエスケープシーケンスの意味と使い方を理解できます。

さらに、ファイルパスやJSON、SQL、正規表現での実践的なテクニックやトラブル対処法、可読性や改行コード管理、コンパイラ警告の活用方法も学べます。

これにより、C#での文字列操作がより効率的で安全になります。

関連記事

Back to top button
目次へ