在一个地方,需要捕捉某种FormatException
。也就是说,“索引(从零开始)”必须大于或等于零且小于参数列表大小的那个。“
这样做的:
catch (FormatException x)
{
if (x.Message == "Index (zero based) must be greater than or equal to zero and less than the size of the argument list.")
{
// do something special...
}
else
{
throw;
}
}
似乎是一个坏主意,因为Message
属性可能已本地化。所以相反,我正在考虑像这样使用HResult
:
catch (FormatException x)
{
if (x.HResult == -2146233033)
{
// do something special...
}
else
{
throw;
}
}
这是一种有效的方法吗?即不同类型的FormatException
会得到不同的HResult
值吗?或者有更好的方法吗?另外,如果这是一种有效的方法,那么魔术常数-2146233033是否定义在某个地方可以重复使用?
答案 0 :(得分:2)
The documentation暗示任何 FormatException
都会有HRESULT:
FormatException
使用HRESULTCOR_E_FORMAT
,其值为0x80131537。
(0x80131537
是-2146233033的32位十六进制表示。)
所以我怀疑你可以使用该属性区分不同类型的FormatException
。抛出异常之前是不是可以检查?