gpt4 book ai didi

c# - 我可以在 string.Format 中格式化 NULL 值吗?

转载 作者:IT王子 更新时间:2023-10-29 03:57:41 24 4
gpt4 key购买 nike

我想知道string.Format中是否有格式化NULL值的语法,例如Excel使用的语法

例如,使用 Excel 我可以指定格式值 {0:#,000.00;-#,000.00,NULL},这意味着如果数值为正数,则显示为数字格式,数字如果为负则在括号中格式化,如果值为空则为 NULL

string.Format("${0:#,000.00;(#,000.00);NULL}", someNumericValue);

编辑

我正在寻找格式化所有数据类型的 NULL/Nothing 值,而不仅仅是数字类型。

我的示例实际上是不正确的,因为我错误地认为 Excel 在值为 NULL 时使用了第三个参数,但实际上在值为 0 时使用了它。我将它留在那儿,因为这是我能想到的最接近的东西我希望做的事。

我希望避免空合并运算符,因为我正在写日志记录,而且数据通常不是字符串

这样写会容易得多

Log(string.Format("Value1 changes from {0:NULL} to {1:NULL}", 
new object[] { oldObject.SomeValue, newObject.SomeValue }));

比写

var old = (oldObject.SomeValue == null ? "null" : oldObject.SomeValue.ToString());
var new = (newObject.SomeValue == null ? "null" : newObject.SomeValue.ToString());

Log(string.Format("Value1 changes from {0} to {1}",
new object[] { old, new }));

最佳答案

您可以定义一个 custom formatter,如果值为 null 则返回 "NULL",否则返回默认格式化字符串,例如:

foreach (var value in new[] { 123456.78m, -123456.78m, 0m, (decimal?)null })
{
string result = string.Format(
new NullFormat(), "${0:#,000.00;(#,000.00);ZERO}", value);
Console.WriteLine(result);
}

输出:

$123.456,78
$(123.456,78)
$ZERO
$NULL

自定义格式化程序:

public class NullFormat : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type service)
{
if (service == typeof(ICustomFormatter))
{
return this;
}
else
{
return null;
}
}

public string Format(string format, object arg, IFormatProvider provider)
{
if (arg == null)
{
return "NULL";
}
IFormattable formattable = arg as IFormattable;
if (formattable != null)
{
return formattable.ToString(format, provider);
}
return arg.ToString();
}
}

关于c# - 我可以在 string.Format 中格式化 NULL 值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7689040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com