Я тестирую строковое форматирование чисел с разными настройками культуры, используя строковую интерполяцию (с $ "...")
[Fact]
public void FormattingTest()
{
double value = 2012.1234;
CultureInfo c1 = CultureInfo.CreateSpecificCulture("de-CH");
CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
// Works fine - the string is formatted according to the explicitly specified culture
FormattableString f = $"{value:N2}";
Assert.Equal("2'012.12", f.ToString(c1));
// This test fails.
string f2 = $"{value:N2}".ToString(c1);
Assert.Equal("2'012.12", f2); // Actual value is formatted according to CurrentCulture.
}
Кто-нибудь знает, почему второй тест не проходит? Похоже, что компилятор переводит это в
string f2 = $"{value:N2}"; // Evaluate the interpolation using the current culture.
f2 = f2.ToString(c1); // Does nothing, since f2 has no format specifiers any more
Очевидно, это не то, что задумано.