首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于在C#中构建错误代码查找的建议

关于在C#中构建错误代码查找的建议
EN

Stack Overflow用户
提问于 2011-05-18 00:54:05
回答 6查看 15K关注 0票数 4

我是C#的新手,所以如果我的一些概念有偏差,请原谅。我正在使用Canon EDSDK,为了让工作更轻松,我希望能够看到文本形式的错误消息,而不是十六进制值。EDSDK.cs文件包含一长串错误,例如:

代码语言:javascript
复制
public const uint EDS_ERR_TAKE_PICTURE_CARD_NG = 0x00008D07;
public const uint EDS_ERR_TAKE_PICTURE_CARD_PROTECT_NG = 0x00008D08;

理想情况下,我希望将所有这些内容放入某种查找表中,这样我就可以输入十六进制错误代码,并将实际消息作为字符串返回。例如

代码语言:javascript
复制
Hashtable EDSDKErrorCodes = new Hashtable();

EDSDKErrorCodes.Add("0x00008D01", "EDS_ERR_TAKE_PICTURE_AF_NG");
EDSDKErrorCodes.Add("0x00008D08", "EDS_ERR_TAKE_PICTURE_CARD_PROTECT_NG");
etc etc...

在后面的代码中,我可以获取从EDSDK方法返回的错误消息,并以人类可读的形式显示它:

代码语言:javascript
复制
errorcode= EDSDK.EdsInitializeSDK();

MessageBox.Show(Convert.ToString(EDSDKErrorCodes[errorcode]));

我的问题是..这是处理所有这些错误代码的好方法,还是人们推荐的更好、更有效的方法?如果是这样,我如何才能将我的哈希表作为一系列常量来填充,而不是必须使用Add方法?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-05-18 01:02:55

为此,您可以使用枚举。

代码语言:javascript
复制
public enum ErrorCodes : uint
{
    EDS_ERR_TAKE_PICTURE_CARD_NG = 0x00008D07,
    EDS_ERR_TAKE_PICTURE_CARD_PROTECT_NG = 0x00008D08
}

那么您的用法可能如下所示:

代码语言:javascript
复制
ErrorCodes error = (ErrorCodes)EDSDK.EdsInitializeSDK();
MessageBox.Show(Enum.GetName(typeof(ErrorCodes), error));
票数 6
EN

Stack Overflow用户

发布于 2011-05-18 01:05:12

另一种方法是创建一个带有description属性的Enum。有关详细信息,请参阅here。这是对其外观的总结:

代码语言:javascript
复制
public enum ErrorCodes : uint
{
    [Description("Description for EDS_ERR_TAKE_PICTURE_CARD_NG")]
    EDS_ERR_TAKE_PICTURE_CARD_NG = 0x00008D07,
    [Description("Description for EDS_ERR_TAKE_PICTURE_CARD_PROTECT_NG")]
    EDS_ERR_TAKE_PICTURE_CARD_PROTECT_NG = 0x00008D08
}

在最简单的情况下,如果您不关心描述,那么可以使用Enum.GetName将枚举名转换为字符串

票数 16
EN

Stack Overflow用户

发布于 2011-05-18 01:01:34

我认为做一个枚举会更好:

代码语言:javascript
复制
public enum CanonErrorCode
{
    SomeErrorDescription = 14,
    SomeOtherErrorDescription = 15
    // .. etc
}

您只需执行从十六进制到整数的转换。然后,您可以简单地这样调用它:

代码语言:javascript
复制
// Samples
var myErrorCode = (CanonErrorCode)someIntegerValue;
var myErrorCode = CanonErrorCode.SomeOtherErrorDescription;

如果您想要人类格式化的错误描述,那么我建议使用某种映射,如下所示:

代码语言:javascript
复制
static Dictionary<int, string> errorlookups = new Dictionary<int, string>();

errorLookups.Add(10, "This is the human readable error message.");
errorLookups.Add(17, "Create this guy once in a static constructor.");
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6034329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档