文字列挿入($"")でInvariantCultureを指定する

多言語対応のアプリケーションを開発している場合に気を配らなければならないのが.ToString()などによる文字列変換時のカルチャ指定。例えば小数点はピリオドで桁区切りはカンマと思いきや、国によっては逆だったりするので要注意だ。パース時のカルチャ指定と違うとバグるし、国によって出力したデータの書式が違ってスクリプトで解析するのが大変だったりする。

C# 6以降では$""によって文字列挿入ができるようになっているが、普通に書くとCurrentCulture指定になる。InvariantCultureを指定したければ以下のようにする。

var message = FormattableString.Invariant($"It is now {DateTime.UtcNow}");

あるいはusing static System.FormattableString;を指定しておくことでFormattableStringを省略して

var message = Invariant($"It is now {DateTime.UtcNow}");

個人的には前者の方が明らかなので好みだ。

参考 stackoverflow.com