可为空的 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")}");
更优雅的写法:
- 指定要用作占位符一部分的格式
- 将内插字符串文字存储为
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:
我有 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")}");
更优雅的写法:
- 指定要用作占位符一部分的格式
- 将内插字符串文字存储为
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: