有没有办法可以获得Exceptions
的相应错误代码?
我需要抛出异常错误代码而不是它的消息,以便我根据错误代码向用户显示正确的消息。
答案 0 :(得分:8)
如果您正在寻找win32错误代码,可以在Win32Exception
类
catch (Win32Exception e)
{
Console.WriteLine("ErrorCode: {0}", e.ErrorCode);
}
对于普通的旧CLR异常,没有整数错误代码。
鉴于您描述的问题,我将使用 millimoose 的解决方案来获取每种类型的异常的资源字符串。
答案 1 :(得分:5)
例外的全部意义在于它们提供的信息比错误代码更丰富。默认情况下,它们没有,并且实际上并不需要。如果您喜欢使用错误代码,您可以使用自己的异常基类,从中派生所有例外:
public abstract class MyExceptionBase : Exception
{
public int ErrorCode { get; set; }
// ...
}
那就是说,我不会打扰。我个人使用类型名称将异常映射到错误消息:
ResourceManager errorMessages = ...;
errorMessages.GetString(ex.GetType().FullName);
(您还可以创建更灵活的方案,例如使资源格式化字符串并将异常属性插入其中。)
答案 2 :(得分:3)
对于升级到托管例外的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
。