C#における文字列フォーマット
C#には、一定書式に従った文字列を作成する方法が2つある。
string.Format()
と、C# 6.0で導入された補間文字列(Interpolated Strings)である。
string.Format()
は以下のように使用する。
var foo = "foo";
var bar = "bar";
var s = string.Format("{0}{1}", foo, bar);
string.Format()
には以下のような欠点がある。
string.Format()
は、フォーマット文字列内の数字と引数の順番を対応付けるため、対応関係のミスマッチを起こしやすい- コンパイラはフォーマット文字列と引数の数の検査を行わないため、実行時まで間違いに気づかない
補間文字列は以下のように使用する。特徴は、文字列の前に「$」をつけること。
var foo = "foo";
var bar = "bar";
var s = $"{foo}{bar}";
補間文字列内の{}の中には、どんなC#の式でも書くことができる。
上の例では変数を使っているが、$"{GetString()}"
のようメソッドを実行することもできる。
なお、文字列でないものをフォーマット文字列内で使用する際は、明示的にToString()
メソッドを呼ぶようにすべき。
// 非推奨
var s = $"pi: {Math.PI}";
// 推奨
var s = $"pi: {Math.PI.ToString()}";
上記コード例で、Math.PI
はdouble
型なので、文字列への型変換が行われる。これには相応のコストが発生する。
それよりも、ToString()
メソッドを明示的に実行したほうが効率が良い。