我无法弄清楚为什么以下程序在没有警告的情况下进行编译,但是在异常块中,条件运算符给出了NullReferenceException。
using System;
namespace Playground
{
class Program
{
static void Main(string[] args)
{
string message1 = "First message.";
string message2 = null;
// This works without a problem
Console.WriteLine(message1 + message2 == null ? "" : Environment.NewLine + message2);
Console.ReadKey();
try
{
throw new Exception("Now with an exception.");
}
catch (Exception ex)
{
// This will give a NullReferenceException:
Console.WriteLine(ex.Message + ex.InnerException == null ? "" : Environment.NewLine + ex.InnerException.Message);
// ..But this will work:
Console.WriteLine(ex.Message + (ex.InnerException == null ? "" : Environment.NewLine + ex.InnerException.Message));
}
}
}
}
我知道??
运算符,我的问题是为什么异常处理程序的第一行给出NullReferenceException。
ex.Message + ex.InnerException
转换成
string.Concat(ex.Message, ex.InnerException);
这会检查其参数是否为null,如果不存在,则仅将其转换为字符串。这意味着
ex.Message + ex.InnerException == null
是false
这样的表达
Environment.NewLine + ex.InnerException.Message
被评估。由于ex.InnerException
为null,因此将引发异常。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句