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

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

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

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

编辑

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

我的例子实际上是不正确的,因为我错误地认为如果值为NULL,Excel使用第三个参数,但当值为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 }));

你可以定义一个自定义的格式化程序,如果该值为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();
    }
}

我不认为在String.Format中有任何东西可以让你为null字符串指定一个特定的格式。 解决方法是使用空合并运算符,如下所示:

const string DefaultValue = "(null)";

string s = null;
string formatted = String.Format("{0}", s ?? DefaultValue);

这是你想要的吗?

string test;

测试?? “空值”

链接地址: http://www.djcxy.com/p/68913.html

上一篇: Can I format NULL values in string.Format?

下一篇: Which approach better: Process.Start or call DLL directly?