try中的异常的消息属性是否为空字符串或NULL?
我找不到一个明确的答案,以及MS文件不是最大的,所以这里找到一个答案与投入到投票地狱。try中的异常的消息属性是否为空字符串或NULL?
考虑这个简单的代码:
try
{
if (errMessage.Contains(EXCEPTIONCOMPARISONMESSAGE))
{
//do stuff;
}
}
catch (Exception ex)
{
eventLog.WriteEntry("isAbleConvertToPDF: " + ex.Message, EventLogEntryType.Error);
}
我的问题是会永远ex.Message
是空字符串或NULL?我认为不,但我找不到明确的记录答案。
查找文档以备份给出的答案。
这当然有可能 - 自定义异常(从Exception
继承的异常)可能会返回空字符串或空字符串。
构造函数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
对于其中Message
属性标记为virtual
其他异常的基类。
这意味着Message
可以是空字符串或null
,因为每个派生类都可以覆盖它。在Exception
类Message
但是实际执行的样子
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);
虚拟......这就是我所缺少的。 –
如果派生类重写属性getter,则可能返回'null'。 –
@丹斯利,正如我在答案的顶部所说的那样。底部的句子是关于基类“Exception”的 – Fabio
当然:'抛出新的异常(“”);' – djv
如果是,你会做什么不同? –
@DStanley当然我会考虑它,但这不是我所要求的...... –