【发布时间】:2016-09-28 02:10:40
【问题描述】:
我想根据字段值返回一个枚举值。
例如:
如果Free value field的值为'15',我想返回枚举值“1”,因为枚举值1的Label是:'10-20',因为15在10-20的范围内我想返回那个值。
我想为此创建一个显示方法。
我想我可以通过 switch case 场景来实现这一点。
我怎样才能最好地进行设置?
【问题讨论】:
标签: axapta dynamics-ax-2012 x++
我想根据字段值返回一个枚举值。
例如:
如果Free value field的值为'15',我想返回枚举值“1”,因为枚举值1的Label是:'10-20',因为15在10-20的范围内我想返回那个值。
我想为此创建一个显示方法。
我想我可以通过 switch case 场景来实现这一点。
我怎样才能最好地进行设置?
【问题讨论】:
标签: axapta dynamics-ax-2012 x++
当然,您可以使用 switch / case 来实现,但如果您处理一系列值和一组有限的结果值(您的枚举元素),那么简单的 if / else if 就是可能更适合
所以不要在你的案例分支中声明每个可能的值(1、2、3、4 bla bla),而是做这样的事情
int x;
;
x = yourTable.YourField;
if (x >= 1 && x <= 15)
{
return YourEnum::1to15;
}
else if (x >= 16 && x <= 20)
{
return YourEnum::16to20;
}
// other possible ranges
else
{
throw YourEnum::Unknown;
}
【讨论】:
是的,通过switch 声明您可以做到。
试试这个:
int value;
;
switch (value)
{
case 1, 2, 3, 4 ,5:
//Your code
break;
case 10, 11, 12, 13, 14, 15, 16, 17, 18 ,19, 20 :
//Your code
break;
default :
//Your code
}
【讨论】:
我个人喜欢用整数除法变聪明的想法。
如果您的范围将是 10 组,那么您只需除以 10 即可得到枚举值。
所以请看下面的代码和截图:
static void Job1(Args _args)
{
int i;
MyEnum value;
// Test #1
i = 15; // Your number
value = (i/10); // Enum result
info(strFmt("Test #1: %1", value));
// Test #2
i = 5; // Your number
value = (i/10); // Enum result
info(strFmt("Test #2: %1", value));
// Test #3
i = 22; // Your number
value = (i/10); // Enum result
info(strFmt("Test #3: %1", value));
}
【讨论】: