[C#] 逐語的文字列 # String.Formatの危険性(改) その2

2010年6月6日

 String.Formatの危険性(改) その2 です。「"n"とかは書式文字列ではなく文字リテラル」からの続きです。

 C#では、"n"とかは文字リテラルでした。というのは前回の通りですが、"n"と書いたら 0x0D ではなく '' 'n'で評価してくださいよ。という指定(ダブルクォーテーションの前に@をつける)も出来るようで、それを逐語的文字列と呼ぶようです。(変な名前…)

 逐語的リテラル文字列の例

class Program
{
    static void Main(string[] args)
    {
        // 逐語的文字列
        string s =@"AAAAnBBBB";
        System.Console.WriteLine(s);
    }
}

 結果

AAAAnBBBB

 なので、以下のように String.Formatでも書式に逐語的リテラルで指定してしまうと、nは効かなくなってしまいます。(結果は上記と一緒です)

        System.Console.WriteLine(@"{0}n{1}","AAAA","BBBB");

 ちなみに余談ですが、この逐語的文字列、改行を含めることが出来ます。

class Program
{
    static void Main(string[] args)
    {
        // 逐語的文字列
        string s =@"SELECT * FROM TABLE
WHERE ID = 99999
GROUP BY ITEM";
        System.Console.WriteLine(s);
    }
}

 結果

SELECT * FROM TABLE
WHERE ID = 99999
GROUP BY ITEM

 おお便利!と一瞬思ったけど、ソースコードがいまひとつ美しくないのでちょっとなあ…

 つづく






カテゴリー: C#, Program

Follow comments via the RSS Feed | Leave a comment | Trackback URL

2 Comments to "[C#] 逐語的文字列 # String.Formatの危険性(改) その2"

  1. オールトの雲

    [C#] ファイルからの入力の場合

     String.Formatの危険性(改) その3です。「 [C#] 逐語的文字列」からの続きです。
     #デスマってて、間が開いてしまいました…

  2. [VB.NET] “n”とかは書式文字列ではなく文字リテラル # 危険性(改) その1 | オールトの雲

    [...] より[C#] ファイルからの入力の場合 # String.Formatの危険性(改) その3 に [C#] 逐語的文字列 # String.Formatの危険性(改) その2 | オールトの雲 より[SBasic] MMLによるMUSIC # Small Basic その3 に [SBasic] タートルグラフィック [...]

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org