在一个地方,需要捕获某种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/

10-12 16:23