在String.Format参数中的Null即使不在结果字符串中也会抛出NullReferenceException异常

4

String.Format()的参数中,有一个参数是null,因此调用会抛出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个回答

8

由于在任何情况下,您最终都需要评估f2.Ex.Message

应该是:

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

+1 对于代码示例的赞同,它比达林的回答更好地解释了这一点。 - Mauro

6

抛出异常的不是 string.Format,而是这个:f2.Ex.Message。你正在调用 Ex 属性上的 Message getter,而该属性为 null。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接