Неожиданное поведение FormattableString.ToString (IFormatProvider) - PullRequest
0 голосов
/ 28 мая 2020

Я тестирую строковое форматирование чисел с разными настройками культуры, используя строковую интерполяцию (с $ "...")

        [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

Очевидно, это не то, что задумано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...