可为空的 int 特定于 String() 的文化

Nullable int Culture Specific toString()

我有 int 和可为 null 的 int 变量,我想使用特定的区域性格式将它们转换为字符串,即用点分隔数字。

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

对于整数,我可以执行以下操作:

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

这将输出以下内容

The contact sum was: 123.456

但是 Nullable int 没有用于格式化的重载。如何以与 int 相同的方式格式化可为空的 int?或者有更好的方法来进行这种格式设置吗?

最终结果如下:

The result sum was: 654.321

以下是实现目标的两种不同方式。

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")}");

更优雅的写法:

  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: