我如何在c#异常中获得错误编号而不是错误消息?
本文关键字:错误 编号 消息 异常 | 更新日期: 2023-09-27 18:04:14
是否有方法可以获得Exceptions
的相应错误码?我需要抛出的异常错误代码而不是它的消息,这样我就可以根据错误代码向用户显示正确的消息。
如果您正在寻找win32错误代码,可以在Win32Exception
类上找到
catch (Win32Exception e)
{
Console.WriteLine("ErrorCode: {0}", e.ErrorCode);
}
对于普通的旧CLR异常,没有整数错误码。
鉴于您所描述的问题,我将使用millimoose的解决方案来为每种类型的异常获取资源字符串。
异常的全部意义在于它们提供了比错误代码更丰富的信息。默认情况下,它们没有,也不需要。如果你喜欢使用错误代码,你可以使用你自己的异常基类,你可以从中派生所有的异常:
public abstract class MyExceptionBase : Exception
{
public int ErrorCode { get; set; }
// ...
}
那就是说,我不会麻烦的。我个人使用异常的类型名将异常映射到错误消息:
ResourceManager errorMessages = ...;
errorMessages.GetString(ex.GetType().FullName);
(您还可以创建更灵活的方案,例如使资源格式化字符串并将异常属性插入其中)
对于升级为托管异常的COM异常,您将能够从HResult
属性中检索"错误代码",如下所示:
try {
// code goes here
} catch(System.IO.FileNotFoundException ex) {
Console.WriteLine(
String.Format("(HRESULT:0x{1:X8}) {0}",
ex.Message,
ex.HResult)
);
}
并不是所有的异常都有一个有意义的HResult集。
对于。net 3.0, 3.5和4.0,你将不得不使用反射来获得HResult
属性的值,因为它被标记为protected
。