我找不到明确的答案,而MS文档也不是最好的,所以这里找到答案而不是被投入到投票地狱。
考虑这个简单的代码:
try
{
if (errMessage.Contains(EXCEPTIONCOMPARISONMESSAGE))
{
//do stuff;
}
}
catch (Exception ex)
{
eventLog.WriteEntry("isAbleConvertToPDF: " + ex.Message, EventLogEntryType.Error);
}
我的问题是ex.Message
将是一个空字符串还是NULL?我认为不是,但我找不到明确的答案。
请寻找文件以备份答案。
答案 0 :(得分:2)
它当然可能 - 自定义异常(从Exception
继承的异常)可能返回null或空字符串。
Exception
构造函数还将消息作为参数,可以是空字符串。
接口协定中没有任何内容表明消息永远不会为空或为空,因此您应该假设它可以为空或为空。
以下是一个示例,填写示例代码:
try
{
if (errMessage.Contains(EXCEPTIONCOMPARISONMESSAGE))
{
throw new MyEvilException();
}
}
catch (Exception ex)
{ V--------V this will be null
eventLog.WriteEntry("isAbleConvertToPDF: " + ex.Message, EventLogEntryType.Error);
}
private class MyEvilException : Exception
{
public override String Message
{
get
{
return null;
}
}
}
答案 1 :(得分:2)
Exception
是Message
属性标记为virtual
的其他例外的基类。
这意味着Message
可以是空字符串或null
,因为每个派生类都可以覆盖它。
然而,Message
类中Exception
的实际实现类似于
public virtual String Message
{
get
{
if (_message == null)
{
if (_className==null)
{
_className = GetClassName();
}
return Environment.GetResourceString("Exception_WasThrown", _className);
}
else
{
return _message;
}
}
}
从上面可以看出,null
基类永远不会返回Exception
,但throw new Exception(string.Empty);