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#] ファイルからの入力の場合
String.Formatの危険性(改) その3です。「 [C#] 逐語的文字列」からの続きです。
#デスマってて、間が開いてしまいました…
Link | 2010年6月30日 23:44
[VB.NET] “n”とかは書式文字列ではなく文字リテラル # 危険性(改) その1 | オールトの雲
[...] より[C#] ファイルからの入力の場合 # String.Formatの危険性(改) その3 に [C#] 逐語的文字列 # String.Formatの危険性(改) その2 | オールトの雲 より[SBasic] MMLによるMUSIC # Small Basic その3 に [SBasic] タートルグラフィック [...]
Link | 2012年10月22日 22:39