Especificación de la configuración regional para la interpolación de cadenas en C # 6 (Roslyn CTP6)


La interpolación de cadenas en C # 6 me permite escribir:

decimal m = 42.0m;
string x = $"The value is {m}";

Sin embargo, un caso de uso muy común para el formato de cadena es especificar la configuración regional utilizada para formatear los valores. Digamos que necesito usar InvariantCulture para la operación de formateo anterior, ¿cuál es la sintaxis para eso ?

Esta discusión sugiere que debería ser capaz de hacer esto:

string x = INV($"The value is {m}");

Donde INV se define como

public static string INV(IFormattable formattable)
{
    return formattable.ToString(null, System.Globalization.CultureInfo.InvariantCulture);
}

Sin Embargo, esto no funciona. Compila, pero deja mi programa colgando en en cmd.exe al inicio - como si klr.exe, que supongo que está siendo invocado, se cuelga (Compiler bug?)

Esto es un ASP.NET 5 Proyecto de consola en VS15 CTP 6.

Author: leppie, 2015-03-29

2 answers

Lo que tienes debería funcionar. Es la sintaxis correcta. También hay un método conveniente en el Sistema".FormattableString " clase abstracta que tiene el mismo efecto que el método auxiliar "INV" sugerido.

using static System.FormattableString;
...
string x = Invariant($"The value is {m}");
 71
Author: pharring,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-30 05:16:02

Finalmente me di cuenta de esto. Como resultado de esto, la característica del compilador se basa en dos tipos, System.FormattableString, y System.Runtime.CompilerServices.FormattableStringFactory. Estos no estaban disponibles para mi proyecto - supongo que aún no lo han hecho en todas las plataformas para CTP6.

Esto aparentemente hizo que el compilador se colgara como se describe. Una vez que saqué el código para esos dos tipos del código CoreCLR y lo agregué a mi proyecto, mi código funciona como se esperaba.

Esto fue resuelto a través de comentarios de código para el Pruebas de interpolación. Hurra por la fuente que está disponible: -)

 17
Author: driis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-31 19:17:32