C# 是否应该使用HResult属性来识别不同类型的FormatException?

C# 是否应该使用HResult属性来识别不同类型的FormatException?,c#,C#,在一个地方,需要捕获某种类型的FormatException。也就是说,“索引(从零开始)必须大于或等于零,并且小于参数列表的大小。”。 做: 这似乎不是个好主意,因为消息属性可能已本地化。因此,我考虑使用HResult如下: catch (FormatException x) { if (x.HResult == -2146233033) { // do something special... } else { thro

在一个地方,需要捕获某种类型的
FormatException
。也就是说,“索引(从零开始)必须大于或等于零,并且小于参数列表的大小。”。 做:

这似乎不是个好主意,因为
消息
属性可能已本地化。因此,我考虑使用
HResult
如下:

catch (FormatException x)
{
    if (x.HResult == -2146233033)
    {
        // do something special...
    }
    else
    {
        throw;
    }
}
这是一种有效的方法吗?即,不同类型的
FormatException
s是否会获得不同的
HResult
值?还是有更好的方法?此外,如果这是一种有效的方法,是否在某个地方定义了要重用的神奇常量-2146233033?

意味着任何
FormatException
都将具有该HRESULT:

FormatException
使用HRESULT
COR_E_格式
,其值为0x80131537

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


因此,我怀疑您能否使用该属性来区分不同类型的
FormatException
s。在抛出异常之前是否不能进行检查?

可以,但这涉及到解析格式字符串以计算参数数量。谢谢你的提示!
catch (FormatException x)
{
    if (x.HResult == -2146233033)
    {
        // do something special...
    }
    else
    {
        throw;
    }
}