String.Format args中的Null抛出NullReferenceException,即使arg不在结果字符串中

时间:2010-02-18 09:36:23

标签: c# .net exception-handling string-formatting nullreferenceexception

null中的一个参数中有一个String.Format(),因此调用thr NullReferenceException。为什么即使参数不在结果字符串中也要进行检查?

class Foo
{
    public Exception Ex { get; set; }
}

class Program
{
    public static void Main(string[] args)
    {
        var f1 = new Foo() { Ex = new Exception("Whatever") };
        var f2 = new Foo();         

        var error1 = String.Format((f1.Ex == null) ? "Eror" : "Error: {0}", f1.Ex.Message); // works
        var error2 = String.Format((f2.Ex == null) ? "Eror" : "Error: {0}", f2.Ex.Message); // NullReferenceException 
    }
}

除了if()分隔的两个电话外,是否有任何变通办法?

2 个答案:

答案 0 :(得分:8)

这是因为在任何一种情况下你最终都会评估f2.Ex.Message

应该是:

var error2 = (f2.Ex == null) ? "Eror" : String.Format("Error: {0}", f2.Ex.Message);

答案 1 :(得分:6)

抛出异常不是string.Format,而是:f2.Ex.Message。您正在Message Ex属性上调用{{1}} getter。