如果 Windows 运行时类型引发 COM 错误,.NET 似乎经常(或总是?)将此错误包装到一个Exception
实例中。错误消息包括 COM HRESULT 错误代码。例如,当使用带有 AES-CBC 的新 Cryptographic API 时,错误的缓冲区长度会导致出现Exception
消息“提供的用户缓冲区对于请求的操作无效。( Exception from HRESULT: 0x800706F8
)”。
那么,我们应该如何处理这些异常呢?我们是否应该从异常中读取HRESULT
代码以了解这是什么类型的异常?在经典的 .NET 中,我会得到一个CryptographicException
可以用来区分加密错误和其他错误的错误。
我不明白的另一件事是,Microsoft 代码质量规则规定永远不应该抛出异常,而应该总是派生类型。原因是不应该强迫任何人去捕捉Exception
同样捕捉更多致命异常的将军OutOfMemoryException
。另一条规则说,一个人永远不应该Exceptio
在图书馆里抓到 n。如果我们被迫使用Exception
Windows 应用商店应用程序或 WinRT 库,我们如何遵守这些政策?
顺便说一句:Clemens Vasters 在他的博客中展示了我们如何在避免捕获致命异常的同时捕获异常。我认为捕获Exception
不再是糟糕的代码。