C#6の文字列補間により、次のように記述できます。
decimal m = 42.0m;
string x = $"The value is {m}";
ただし、文字列フォーマットの非常に一般的な使用例は、値のフォーマットに使用されるロケールを指定することです。上記のフォーマット操作にInvariantCulture
を使用する必要があるとしましょう。その構文は何ですか?
この議論 は、私がこれを行うことができるはずであることを示唆しています:
string x = INV($"The value is {m}");
INVは次のように定義されます
public static string INV(IFormattable formattable)
{
return formattable.ToString(null, System.Globalization.CultureInfo.InvariantCulture);
}
ただし、これは機能しません。コンパイルはされますが、起動時にcmd.exeでプログラムがハングしたままになります-klr.exeが起動されていると想定してハングするように(コンパイラのバグ?)
これは、VS15 CTP 6のASP.NET 5コンソールプロジェクトです。
私はついにこれを理解しました。結局のところ、コンパイラー機能は2つのタイプに依存しています System.FormattableString
、および System.Runtime.CompilerServices.FormattableStringFactory
。これらは私のプロジェクトでは利用できませんでした-CTP6のすべてのプラットフォームにまだ入っていない可能性があると思います。
これにより、説明したようにコンパイラがハングしたようです。 CoreCLRコードからこれら2つのタイプのコードを取得し、プロジェクトに追加すると、コードは期待どおりに機能します。
これは、 InterpolationTests のコードコメントを通じて把握されました。利用可能なソースのHooray :-)
あなたが持っているものが動作するはずです。正しい構文です。 「System.FormattableString」抽象クラスには、推奨される「INV」ヘルパーメソッドと同じ効果がある便利なメソッドもあります。
using static System.FormattableString;
...
string x = Invariant($"The value is {m}");