我在 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()
分隔的两个调用之外,是否有任何解决方法?
最佳答案
这是因为无论哪种情况,您最终都会计算 f2.Ex.Message
。
应该是:
var error2 = (f2.Ex == null) ? "Eror" : String.Format("Error: {0}", f2.Ex.Message);
关于c# - Null in String.Format args 抛出 NullReferenceException 即使 arg 不在结果字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2287553/