2016-07-07 5 views
-1

アプリケーションでは、このフォーマットの設定から文字列をロードしますstackoverflow.com?questionId={0}。明らかに、実行時に値が設定され、クエリ文字列で使用されます。"Hello {0}"のような文字列を出力する

私はこの方法を使用して、起動時にこれらの文字列を記録したい:

void log(string message, params object[] vars) 
     { 
      string s = String.Format(message, vars); 
      Console.WriteLine(s); 
     } 

あなたが呼び出すためString.Formatが例外をスロー期待しかしとして:log(String.Format("Adding new feed '{0}'", "stackoverflow.com?questionId={0}"))からString.Format試行を内側{0}を置換する「(ログ)」。

{文字をエスケープして置換を試みない簡単な方法はありますか?

+1

はちょうどダブル: '{0}': '{{0}}' –

+1

しかし@DmitryBychenko、実際_usage_を壊すこと...これらは代用されていると考えられているのは、問題のログだけです。 –

+1

ああ、私はジレンマを参照してください。あなたはそれを両方向に持つことはできません。あなたは、 'params'を必要とせず、' string.format'を呼び出さないログメソッドへのオーバーロードが必要になるかもしれません。 「プレースホルダを引用する方法」を質問しているわけではないので、再度開いて投票しますが、「時にはそれらがプレースホルダでないとはどういうふうにしますか」 – hometoast

答えて

1

これには2つの回答があります。

まず、私は、次の操作を行って、中括弧をエスケープ:これは正常に動作します

log(String.Format("Adding new feed '{0}'", feedStr.Replace("{", "{{").Replace("}", "}}")));

は、第二MartinBrownによって示唆されているように私には何ができる実現:

log("Adding new feed '{0}'", feedStr); 
関連する問題