¿Cuál es la cultura predeterminada para la interpolación de cadenas de C# 6?


En C# 6 ¿cuál es la cultura predeterminada para la nueva interpolación de cadenas?

He visto informes contradictorios de Cultura Invariante y Actual.

Me gustaría una respuesta definitiva y estoy manteniendo mis dedos cruzados para Invariante.

Author: i3arnon, 2015-10-19

1 answers

Usando interpolación de cadenas en C# se compila en una simple llamada a String.Format. Puedes ver con TryRolsyn que esto:

public void M()
{
    string name = "bar";
    string result = $"{name}";
}

Se compila en esto:

public void M()
{
    string arg = "bar";
    string text = string.Format("{0}", arg);
}

Está claro que esto no utiliza una sobrecarga que acepta un proveedor de formato, por lo tanto, utiliza la cultura actual.

Sin embargo, puede compilar la interpolación en FormattbleString en su lugar, lo que mantiene el formato y los argumentos separados y pasar una cultura específica al generar el final cadena:

FormattableString formattableString = $"{name}";
string result = formattableString.ToString(CultureInfo.InvariantCulture);

Ahora, ya que (como prefieras) es muy común usar InvariantCulture específicamente, hay una abreviatura para eso:

string result = FormattableString.Invariant($"{name}");
 39
Author: i3arnon,
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-11-23 17:01:15