在一个地方,需要捕获某种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? 最佳答案
The documentation表示任何FormatException
将具有该HRESULT:
FormatException
使用HRESULT COR_E_FORMAT
,其值为0x80131537。
(0x80131537
是-2146233033的32位十六进制表示形式)。
因此,我怀疑您可以使用该属性来区分不同类型的FormatException
。引发异常之前,您是否可以进行检查?
关于c# - 是否应使用HResult属性识别不同类型的FormatException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28046853/