我有我的dll,它包含函数:
function GetPdfReport(
//this is string representation of MyEnum
AStringParam : Pchar
): TByteDynArray; stdcall; export;
var
//my vars
begin
try
try
//i try to pass incorrect string value on purpose to get exception
MyEnumVariable := TRttiEnumerationType.GetValue<MyEnum>(AStringParam);
//code hide
except
on E : Exception do
begin
//log error
Log.Error(E.ClassName + ' : ' + E.Message, 'errors');
end;
end;
finally
//dispose
end;
然后我得到例外:
InnerException消息为“无效枚举值”\u 24170“无法反序列化为类型“MyEnum”。
我希望日志异常消息包含作为参数传递的字符串值,但不要包含一些不清楚的数字,如“\u 24170”。我该怎么做?
更新:
假设我有一个MyEnum,有三个值(一、二、三),当我传递到函数字符串“五”时,我想看到如下异常:
无效的枚举值“Five”无法反序列化为类型“MyEnum”。
谢谢
如果提供的文本与枚举值之一不匹配,您呈现的代码不会引发异常。相反,返回-1
的值。当然,-1
不是有效的枚举值,因此TRttiEnumationType。如果您希望执行错误处理,GetValue
是一个相当有问题的方法。
你需要自己测试一下。与其使用TRttiEnumerationType,不如直接转到GetEnumValue,这将返回一个整数,从而使错误检查更容易编写。
var
OrdinalValue: Integer;
Value: MyEnum;
....
OrdinalValue := GetEnumValue(TypeInfo(MyEnum), AStringParam);
if OrdinalValue = -1 then
// handle error
Value := MyEnum(OrdinalValue);
当然,您希望将其包装在一个方法中,以使其可重用。
我需要java JAVA CODE中此解决方案的delphi解决方案
多次调用特定枚举类的value()函数是否效率低下? 我见过一些现有代码的实例,其中values()的结果被缓存以供重用。这有用吗?
枚举具有名为'hash value'的属性,该属性是枚举内的索引。
问题内容: 我有一个枚举的类对象(我有一个),我需要获取此枚举表示的枚举值的列表。该静态函数有我需要什么,但我不知道怎么去从类对象访问它。 问题答案:
我正在使用LWJGL,当使用Util.checkGLError()检查时,下面的OpenGL调用导致无效的枚举错误 GL11.glTexParameteri(GL11.GL_TEXTURE_2D,GL11.GL_Textture_WRAP_S,GL11.GL_CLAMP); 我已经把范围缩小到GL_CLAMP,因为GL_REPEAT有效。还应该指出的是,GL_CLAMP在我的笔记本电脑上运行良好,
在TypeScript中,我定义了一个,然后我想让一个函数接受一个参数,该参数的值是枚举的值之一。但是,TypeScript似乎不对值进行任何验证,并允许枚举之外的值。有办法做到这一点吗? 如果我使用而不是,我可以得到与我所要得到的类似的东西,但是我失去了enum的一些功能。