try catch 中异常的消息属性是空字符串还是 NULL?
Is the message attribute of an exception in try catch ever an empty string or NULL?
我找不到明确的答案,而且 MS 文档也不是最好的,所以这里是寻找答案而不是被投进反对票地狱。
考虑这个简单的代码:
try
{
if (errMessage.Contains(EXCEPTIONCOMPARISONMESSAGE))
{
//do stuff;
}
}
catch (Exception ex)
{
eventLog.WriteEntry("isAbleConvertToPDF: " + ex.Message, EventLogEntryType.Error);
}
我的问题是 ex.Message
会是空字符串还是 NULL?我认为不是,但我找不到明确的记录答案。
也请寻找文档来支持给出的答案。
当然有可能 - 自定义异常(继承自 Exception
的异常)可能 return 为 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;
}
}
}
Exception
是 class 其他异常的基础 Message
属性 被标记为 virtual
.
这意味着 Message
可以是空字符串或 null
,因为每个派生的 class 都可以覆盖它。
然而 Message
在 Exception
class 中的实际实现看起来像
public virtual String Message
{
get
{
if (_message == null)
{
if (_className==null)
{
_className = GetClassName();
}
return Environment.GetResourceString("Exception_WasThrown", _className);
}
else
{
return _message;
}
}
}
所以你可以从上面看到,null
永远不会从 Exception
base class 返回,但是当 throw new Exception(string.Empty);
[=21 时会返回空字符串=]
我找不到明确的答案,而且 MS 文档也不是最好的,所以这里是寻找答案而不是被投进反对票地狱。
考虑这个简单的代码:
try
{
if (errMessage.Contains(EXCEPTIONCOMPARISONMESSAGE))
{
//do stuff;
}
}
catch (Exception ex)
{
eventLog.WriteEntry("isAbleConvertToPDF: " + ex.Message, EventLogEntryType.Error);
}
我的问题是 ex.Message
会是空字符串还是 NULL?我认为不是,但我找不到明确的记录答案。
也请寻找文档来支持给出的答案。
当然有可能 - 自定义异常(继承自 Exception
的异常)可能 return 为 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;
}
}
}
Exception
是 class 其他异常的基础 Message
属性 被标记为 virtual
.
这意味着 Message
可以是空字符串或 null
,因为每个派生的 class 都可以覆盖它。
然而 Message
在 Exception
class 中的实际实现看起来像
public virtual String Message
{
get
{
if (_message == null)
{
if (_className==null)
{
_className = GetClassName();
}
return Environment.GetResourceString("Exception_WasThrown", _className);
}
else
{
return _message;
}
}
}
所以你可以从上面看到,null
永远不会从 Exception
base class 返回,但是当 throw new Exception(string.Empty);
[=21 时会返回空字符串=]