Nullable int Культурно-ориентированный toString () - PullRequest
3 голосов
/ 25 апреля 2019

У меня есть переменные int и nullable int, которые я хочу преобразовать в строку с использованием определенного формата культуры, а именно, разделить число точками.

var culture = CultureInfo.CreateSpecificCulture("de-DE");
int contactSum = 123456;
int? resultSum = 654321;

Для int я могу сделать следующее:

Console.WriteLine($"The contact sum was: {contactSum.ToString("N0", culture)}");

Будет выведено следующее

Сумма контакта: 123,456

Nullable int, однако не имеет перегрузок для форматирования.Как я могу отформатировать nullable int так же, как int?Или есть лучший способ сделать этот тип форматирования?

Конечный результат будет следующим:

Итоговая сумма была: 654,321

Ответы [ 2 ]

2 голосов
/ 25 апреля 2019

Более элегантный способ написания этого:

  1. Укажите формат, который будет использоваться как часть заполнителя
  2. Сохраните интерполированный строковый литерал как FormattableString, а затем используйте ToString() на всю строку, чтобы указать, какую культуру использовать при ее интерпретации.

Пример кода

private void Test(object sender, EventArgs e)
{
    int contactSum = 123456;
    int? resultSum = 654321;
    int? nullSum = null;

    CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");

    ShowInt(contactSum, culture);
    ShowInt(resultSum, culture);
    ShowInt(nullSum, culture);

    culture = CultureInfo.CreateSpecificCulture("de-DE");

    ShowInt(contactSum, culture);
    ShowInt(resultSum, culture);
    ShowInt(nullSum, culture);
}

private void ShowInt(int? value, IFormatProvider formatProvider)
{
    FormattableString message = $"The Sum was: {value:N0}";
    Console.WriteLine(message.ToString(formatProvider));
}

Вывод:

The Sum was: 123,456
The Sum was: 654,321
The Sum was: 
The Sum was: 123.456
The Sum was: 654.321
The Sum was: 
2 голосов
/ 25 апреля 2019

Вот два разных способа достижения цели.

var culture = CultureInfo.CreateSpecificCulture("de-DE");
int contactSum = 123456;
int? resultSum = 654321;
Console.WriteLine($"The contact sum was: {contactSum.ToString("N0", culture)}");
Console.WriteLine($"The contact sum was: {resultSum?.ToString("N0", culture)}");
Console.WriteLine($"The contact sum was: {(resultSum.HasValue ? resultSum.Value.ToString("N0", culture) : "NULL")}");
...