是否有一种快速查找枚举的方法,只使用枚举的标签而不是值。假设Enum类型是SalesStatus,我希望能够基本上调用某种函数,如enumLabel2Value(enumStr(SalesStatus),“Open order”),它将返回1.
我试图避免循环通过所有可能的值并分别检查每个值,似乎这应该是随时可用的东西,因为每当用户过滤网格上的枚举列时,它们都会输入标签,而不是价值,但我没有看到类似的东西。
答案 0 :(得分:3)
它不存在,因为标签可以是不同语言的各种东西。 symbol2Value()
虽然存在,但您可能正在寻找,但您的问题仅针对标签。这可能是非常糟糕的一个例子......
假设您有一个名为GoodBadPresent
的枚举,用两个值表示您将收到的圣诞礼物类型:
GoodBadPresent::Poison
英文标签:“Poison”;德国品牌:“礼物”GoodBadPresent::Gift
英文标签:“礼物”;德国品牌:“Geschenk”如果此示例不明确,则德语中Poison
的字词为Gift
。因此,如果您尝试将Gift
解析为枚举值,则还必须提供该语言。这里的性能问题可能大于循环枚举的性能问题。
您可以查看DictEnum
,看看是否有任何方法可以帮助您更简洁地实现您想要的效果。 https://msdn.microsoft.com/en-us/library/gg837824.aspx
我对您的场景细节更感兴趣,您需要从标签返回枚举。
答案 1 :(得分:3)
您可以使用str2Enum功能。来自文档:
检索其本地化 Label 属性值的枚举元素 匹配输入字符串。
除了Alex Kwitny的回答之外,我建议您查看文档的评论,特别是评论
请注意,str2Enum执行部分匹配并匹配 字符串的开头。如果有多个匹配,则需要 第一个。
另外,请查看类string2Enum
的方法DMFEntityBase
,它支持如何指定枚举元素的不同选项。我认为使用DictEnum.name2Value()方法枚举其标签指定的枚举元素。
<强>更新强>
OP在对Alex Kwitny的回答中提到,这是他遇到问题的特定枚举ExchangeRateDisplayFactor
。 str2Enum
也适用于该枚举,如以下作业所示:
static void str2EnumTest(Args _args)
{
ExchangeRateDisplayFactor factor;
factor = str2Enum(factor, '1');
info(strFmt('%1', factor)); // outputs '1'
factor = str2Enum(factor, '10');
info(strFmt('%1', factor)); // outputs '10'
factor = str2Enum(factor, '100');
info(strFmt('%1', factor)); // outputs '100'
factor = str2Enum(factor, '1000');
info(strFmt('%1', factor)); // outputs '1000'
factor = str2Enum(factor, '10000');
info(strFmt('%1', factor)); // outputs '10000'
}