Подтвердить что ты не робот

Какова культура по умолчанию для интерполяции строк С# 6?

В С# 6 какова культура по умолчанию для новой интерполяции строк?

Я видел противоречивые сообщения как об инвариантной, так и текущей культуре.

Я хотел бы получить окончательный ответ, и я держу пальцы за Инвариант.

4b9b3361

Ответ 1

Использование строковой интерполяции в С# скомпилировано в простой вызов String.Format. Вы можете увидеть TryRolsyn, что это:

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

Скомпилировано в это:

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

Ясно, что это не использует перегрузку, которая принимает поставщика формата, следовательно, использует текущую культуру.

Однако вы можете скомпилировать интерполяцию в FormattbleString, которая сохраняет формат и аргументы отдельно и передает определенную культуру при создании окончательной строки:

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

Теперь, поскольку (как вы предпочитаете), очень часто используется InvariantCulture, в частности, сокращение для этого:

string result = FormattableString.Invariant($"{name}");