有没有更简洁的方法来检查设置变量的条件然后使用一堆 IF 语句?

Is there a cleaner way to check for a condition to set a variable then to use a bunch of IF statements?

我希望能够缩短我的代码。这似乎超级冗余,但我不确定除了大型 IF 语句之外,我还会如何检查特定条件来设置变量?

IF MaxContaminationCode := -2 THEN
        ContaminationClass := '000';
    ELSIF MaxContaminationCode := -1 THEN
        ContaminationClass := '00';
    ELSIF MaxContaminationCode := 0 THEN
        ContaminationClass := '0';
    ELSIF MaxContaminationCode := 1 THEN
        ContaminationClass := '1';
    ELSIF MaxContaminationCode := 2 THEN
        ContaminationClass := '2';
    ELSIF MaxContaminationCode := 3 THEN
        ContaminationClass := '3';
    ELSIF MaxContaminationCode := 4 THEN
        ContaminationClass := '4';
    ELSIF MaxContaminationCode := 5 THEN
        ContaminationClass := '5';
    ELSIF MaxContaminationCode := 6 THEN
        ContaminationClass := '6';
    ELSIF MaxContaminationCode := 7 THEN
        ContaminationClass := '7';
    ELSIF MaxContaminationCode := 8 THEN
        ContaminationClass := '8';
    ELSIF MaxContaminationCode := 9 THEN
        ContaminationClass := '9';
    ELSIF MaxContaminationCode := 10 THEN
        ContaminationClass := '10';
    ELSIF MaxContaminationCode := 11 THEN
        ContaminationClass := '11';
    ELSIF MaxContaminationCode := 12 THEN
        ContaminationClass := '12';
    END_IF

使用这段代码,我正在检查一个计算值 (MaxContaminationCode),它是一个 INT,是否是一个特定值。如果是特定值,则将“ContaminationClass”(字符串)设置为相应的值。

一般来说,如果您有很多不同的情况,那么最好使用 CASE 语句(其他语言中的 'switch')作为 DrBwts说。此外,正如 Gereon 所说,在您的示例中,您可以减少检查的案例。因此,对于您的示例,它看起来像这样:

CASE MaxContaminationCode OF
-2:
  ContaminationClass := '000';
-1:
  ContaminationClass := '00';
0..12: // if you ONLY want 0 to 12, otherwise use ELSE here
  ContaminationClass := INT_TO_STRING(MaxContaminationCode);
END_CASE

同意以上建议。但是为了让它更紧凑(-2 行)。

ContaminationClass := INT_TO_STRING(MaxContaminationCode);
IF MaxContaminationCode = -2 THEN
    ContaminationClass := '000';
ELSIF MaxContaminationCode = -1 THEN
    ContaminationClass := '00';
END_IF