dart如何获得带有索引的枚举?

时间:2018-07-21 03:02:26

标签: generics enums dart

我定义了一个枚举:

WHERE TO_DATE(START_DATE,'DD-MM-YYYY HH:MI:SS')>=  ADD_MONTHS( TO_DATE('26-' || UPPER($P{MONTH}) || '-' ||  $P{YEAR} ,'DD-MM-YYYY') ,-1)
AND 
TO_DATE(END_DATE,'DD-MM-YYYY HH:MI:SS') <=  ADD_MONTHS( TO_DATE('26-' || UPPER($P{MONTH})|| '-' ||  $P{YEAR} ,'DD-MM-YYYY') ,0)

我想用索引创建一个枚举:

enum TestEnum {
  test1,
  test2,
}

我不知道枚举的类型。

4 个答案:

答案 0 :(得分:2)

enum A { a1, a2, a3}
A.values[index]

答案 1 :(得分:0)

您不能对类型参数进行静态访问,因此无法使用。

除了反射(dart:mirrors)之外,没有其他方法可以将值从该类型转换为该类型的静态成员。

答案 2 :(得分:0)

我知道您的意思,但似乎不被支持。至少您可以覆盖它:

enum YourEnum { a1, a2, a3 }
enum AnotherEnum { b1, b2, b3 }

abstract class ToolsEnum<T> {
  T getEnumFromString(String value);
}

class YourClass with ToolsEnum<YourEnum> {
  @override
  YourEnum getEnumFromString(String value) {
    return YourEnum.values
        .firstWhere((e) => e.toString() == "YourEnum." + value);
  }
}

class AnotherClass with ToolsEnum<AnotherEnum> {
  @override
  AnotherEnum getEnumFromString(String value) {
    return AnotherEnum.values
        .firstWhere((e) => e.toString() == "AnotherEnum." + value);
  }
}

答案 3 :(得分:0)

我知道这是一个老问题,至少到目前为止,似乎无法返回E,其中E是通用enum,但是我正在使用此代码:

static dynamic asEnumValue(List<dynamic> enumValues, int index) {
    try {
      return enumValues[index];
    } catch (err) {
      return null;
    }
  }

这仅使您不必每次检查index是否为您的Enum类型的正确值。 如果您传递正确的值,则仍可以使用枚举属性,例如之后的索引。

当然,如果您未传递正确的枚举值,您将得到TypeError

使用示例(DartPad):

enum Test {
  a,
  b,
  c
}

dynamic asEnumValue(List<dynamic> enumValues, int index) {
    try {
      return enumValues[index];
    } catch (err) {
      return null;
    }
  }

Test aTest;
Test nullTest1;
Test nullTest2;


void main() {
  
  aTest = asEnumValue(Test.values, 0);
  nullTest1 = asEnumValue(Test.values, -1);
  nullTest2 = asEnumValue(Test.values, null);
  
  print(aTest);
  print(nullTest1);
  print(nullTest2);
  
  print(aTest?.index);
  print(nullTest1?.index);
  print(nullTest2?.index);
}

输出:

Test.a
null
null
0
null
null