Axapta 基于字段值显示枚举值

Axapta 基于字段值显示枚举值,axapta,dynamics-ax-2012,x++,Axapta,Dynamics Ax 2012,X++,我想基于字段值返回枚举值 例如: 如果自由值字段的值为“15”,我想返回枚举值“1”,因为枚举值1的标签是:“10-20”,因为15在10-20的范围内,我想返回该值 我想为此创建一个显示方法 我想我可以通过一个切换案例场景来实现这一点。 我如何才能最好地设置它?是的,使用开关语句,您就可以进行设置 试试这个: int value; ; switch (value) { case 1, 2, 3, 4 ,5: //Your code br

我想基于字段值返回枚举值

例如:

如果
自由值字段
的值为“15”,我想返回枚举值“1”,因为枚举值1的标签是:“10-20”,因为15在10-20的范围内,我想返回该值

我想为此创建一个显示方法

我想我可以通过一个
切换案例
场景来实现这一点。

我如何才能最好地设置它?

是的,使用
开关
语句,您就可以进行设置

试试这个:

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
}

当然,您可以使用
开关
/
大小写
,但是如果您处理的是一系列值和一组有限的结果值(枚举元素),那么简单的
if
/
或者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;
}
intx;
;
x=yourTable.YourField;

如果(x>=1&&x=16&&x我个人喜欢巧妙地使用整数除法

如果您的范围是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));
}