概要
Ver. 10
C# 10.0 で、補完文字列(interpolated string)のコンパイル結果に変更が掛かって、 これまでよりもかなり高速化されました。 詳細は気にせず単に高速化の恩恵だけを受けたい場合、 言語バージョン、SDK バージョンを C# 10.0/.NET 6.0 にアップデートして再コンパイルするだけで速くなります。
一方、本項では、 C# 9.0 までの補間文字列の問題点と、 C# 10.0 から補間文字列がどのように展開されるかについて説明します。 仕組みがわかれば、補間文字列の解釈を結構自由にカスタマイズすることができます。
C# 9.0 までの補間文字列
例えば以下のようなコードがあったとします。
static string m(int a, int b, int c, int d) => $"{a}.{b}.{c}.{d}";
C# 9.0 までは、このコードは以下のように展開されていました。
static string m(int a, int b, int c, int d) => string.Format("{0}.{1}.{2}.{3}", a, b, c, d);
要は string.Format
メソッド呼び出しへの展開でした。
ちなみに、ここで呼ばれている Format
メソッドは以下のようなオーバーロードです。
Format(public static string format, params object?[] args)
この展開方法では以下のようなコストがどうしても避けられず、用途によっては使うのがためらわれていました。