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

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

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

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

编辑

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

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

我希望避免空合并运算符,因为我正在写日志logging,并且数据通常不是一个string

写这样的东西会容易得多

 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" ,否则返回默认格式化的string,例如:

 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中有任何东西可以让你为nullstring指定一个特定的格式。 解决方法是使用空合并运算符 ,如下所示:

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

这是你想要的吗?

 string test; 

testing?? “空值”

它看起来像.NET的String.Format行为与Excel相同,也就是说,您可以使用; 正值,负值和0值的分隔符,但不是NULL: http : //msdn.microsoft.com/en-us/library/0c899ak8.aspx#SectionSeparator 。

您可能只需手动处理空值:

 if (myval == null) // handle else return String.Format(...); 

你可以使用一个扩展方法:

  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());