HResult属性是否应该用于识别不同类型的FormatException?

时间:2015-01-20 13:44:23

标签: c#

在一个地方,需要捕捉某种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是否定义在某个地方可以重复使用?

1 个答案:

答案 0 :(得分:2)

The documentation暗示任何 FormatException都会有HRESULT:

  

FormatException使用HRESULT COR_E_FORMAT,其值为0x80131537。

0x80131537是-2146233033的32位十六进制表示。)

所以我怀疑你可以使用该属性区分不同类型的FormatException。抛出异常之前是不是可以检查?