L'interpolation de chaînes en C # 6 me permet d'écrire:
decimal m = 42.0m;
string x = $"The value is {m}";
Cependant, un cas d'utilisation très courant pour le formatage de chaîne consiste à spécifier les paramètres régionaux utilisés pour le formatage des valeurs. Disons que je dois utiliser InvariantCulture
pour l'opération de formatage ci-dessus, quelle est la syntaxe pour cela?
Cette discussion suggère que je devrais pouvoir faire ceci:
string x = INV($"The value is {m}");
Où INV est défini comme
public static string INV(IFormattable formattable)
{
return formattable.ToString(null, System.Globalization.CultureInfo.InvariantCulture);
}
Cependant, cela ne fonctionne pas. Il compile, mais il laisse mon programme suspendu dans cmd.exe au démarrage - comme si klr.exe, que je suppose être invoqué, se bloque (bogue du compilateur?)
Il s'agit d'un projet de console ASP.NET 5 dans VS15 CTP 6.
J'ai finalement compris cela. En fait, la fonction de compilation repose sur deux types, System.FormattableString
et System.Runtime.CompilerServices.FormattableStringFactory
. Ceux-ci n'étaient pas disponibles pour mon projet - je suppose qu'ils ne l'ont peut-être pas encore fait sur toutes les plates-formes pour CTP6.
Cela a apparemment fait bloquer le compilateur comme décrit. Une fois que j'ai extrait le code de ces deux types du code CoreCLR et que je l'ai ajouté à mon projet, mon code fonctionne comme prévu.
Cela a été compris grâce aux commentaires de code pour les InterpolationTests . Hourra pour la source disponible :-)
Ce que vous avez devrait fonctionner. C'est la syntaxe correcte. Il existe également une méthode pratique sur la classe abstraite "System.FormattableString" qui a le même effet que la méthode d'assistance "INV" suggérée.
using static System.FormattableString;
...
string x = Invariant($"The value is {m}");