我想知道是否存在在string.Format中格式化NULL值的语法,例如Excel使用的
例如,使用Excel我可以指定格式值{0:#,000.00;-#,000.00,NULL}
,这意味着如果为正数则将数值显示为数字格式,如果为负数则显示在括号中的数字格式,如果值为空则显示NULL
string.Format("${0:#,000.00;(#,000.00);NULL}", someNumericValue);
修改
我正在寻找所有数据类型的格式NULL
/ Nothing
值,而不只是数字类型。
我的例子实际上是不正确的,因为我错误地认为Excel使用第3个参数,如果值为NULL,但它实际上在值为0时使用。我将它留在那里,因为它是我能想到的最接近的东西我希望做什么。
我希望避免使用null合并运算符,因为我正在编写日志记录,而且数据通常不是字符串
写一些像
这样的东西要容易得多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 }));
答案 0 :(得分:33)
您可以定义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();
}
}
答案 1 :(得分:11)
我认为String.Format
中没有任何内容可以让您为null
字符串指定特定格式。解决方法是使用null-coalescing operator,如下所示:
const string DefaultValue = "(null)";
string s = null;
string formatted = String.Format("{0}", s ?? DefaultValue);
答案 2 :(得分:2)
这是你想要的吗?
string test;
测试? “NULL”
答案 3 :(得分:1)
看起来像.NET的String.Format与Excel的行为方式相同,即,您可以使用;
分隔符来表示正数,负数和0值,但不能使用NULL:http://msdn.microsoft.com/en-us/library/0c899ak8.aspx#SectionSeparator。< / p>
您可能只需要手动处理空值:
if (myval == null)
// handle
else
return String.Format(...);
答案 4 :(得分:0)
您可以使用扩展方法:
public static string ToDataString(this string prm)
{
if (prm == null)
{
return "NULL";
}
else
{
return "'" + prm.Replace("'", "''") + "'";
}
}
然后在你的代码中你可以这样做:
string Field1="Val";
string Field2=null;
string s = string.Format("Set Value:{0}, NullValue={1}",Field1.ToDataString(), Field2.ToDataString());