Effective C# 3rd 読書メモ 04 string.Format()ではなく補間文字列を使う

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.PIdouble型なので、文字列への型変換が行われる。これには相応のコストが発生する。
それよりも、ToString()メソッドを明示的に実行したほうが効率が良い。

参考:補間文字列 (C# および Visual Basic リファレンス)

コメントをどうぞ

コメントを残す