我是C#的新手,所以如果我的一些概念有偏差,请原谅。我正在使用Canon EDSDK,为了让工作更轻松,我希望能够看到文本形式的错误消息,而不是十六进制值。EDSDK.cs文件包含一长串错误,例如:
public const uint EDS_ERR_TAKE_PICTURE_CARD_NG = 0x00008D07;
public const uint EDS_ERR_TAKE_PICTURE_CARD_PROTECT_NG = 0x00008D08;理想情况下,我希望将所有这些内容放入某种查找表中,这样我就可以输入十六进制错误代码,并将实际消息作为字符串返回。例如
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方法返回的错误消息,并以人类可读的形式显示它:
errorcode= EDSDK.EdsInitializeSDK();
MessageBox.Show(Convert.ToString(EDSDKErrorCodes[errorcode]));我的问题是..这是处理所有这些错误代码的好方法,还是人们推荐的更好、更有效的方法?如果是这样,我如何才能将我的哈希表作为一系列常量来填充,而不是必须使用Add方法?
发布于 2011-05-18 01:02:55
为此,您可以使用枚举。
public enum ErrorCodes : uint
{
EDS_ERR_TAKE_PICTURE_CARD_NG = 0x00008D07,
EDS_ERR_TAKE_PICTURE_CARD_PROTECT_NG = 0x00008D08
}那么您的用法可能如下所示:
ErrorCodes error = (ErrorCodes)EDSDK.EdsInitializeSDK();
MessageBox.Show(Enum.GetName(typeof(ErrorCodes), error));发布于 2011-05-18 01:05:12
另一种方法是创建一个带有description属性的Enum。有关详细信息,请参阅here。这是对其外观的总结:
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将枚举名转换为字符串
发布于 2011-05-18 01:01:34
我认为做一个枚举会更好:
public enum CanonErrorCode
{
SomeErrorDescription = 14,
SomeOtherErrorDescription = 15
// .. etc
}您只需执行从十六进制到整数的转换。然后,您可以简单地这样调用它:
// Samples
var myErrorCode = (CanonErrorCode)someIntegerValue;
var myErrorCode = CanonErrorCode.SomeOtherErrorDescription;如果您想要人类格式化的错误描述,那么我建议使用某种映射,如下所示:
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.");https://stackoverflow.com/questions/6034329
复制相似问题