Enums 将枚举类型作为参数传递到Dart 2中

Enums 将枚举类型作为参数传递到Dart 2中,enums,dart,Enums,Dart,就像将类类型作为参数传递给方法一样,我想传递enum,因为我想编写一个对enum进行操作的通用方法 我试过: void foo(E): print(E.values[0]) 但它不起作用 有办法吗?这可能适合你 typedef EnumValues<T> = List<T> Function(); void main() { foo<E1>(() => E1.values); foo<E2>(() => E2.v

就像将类类型作为参数传递给方法一样,我想传递enum,因为我想编写一个对enum进行操作的通用方法

我试过:

  void foo(E):
    print(E.values[0])
但它不起作用


有办法吗?

这可能适合你

typedef EnumValues<T> = List<T> Function();

void main() {
  foo<E1>(() => E1.values);
  foo<E2>(() => E2.values);
}

enum E1 { a, b }
enum E2 { c, d }

void foo<T>(EnumValues<T> valuesFn) {
  var values = valuesFn();
  for (var v in values) {
    print(v);
  }
}
typedef EnumValues=List函数();
void main(){
foo(()=>E1.值);
foo(()=>E2.值);
}
枚举E1{a,b}
枚举E2{c,d}
void foo(枚举值){
var values=valuesFn();
用于(var v值){
印刷品(五);
}
}
请参阅注释-较短版本

void main() {
  foo<E1>(E1.values);
  foo<E2>(E2.values);
}

enum E1 { a, b }
enum E2 { c, d }

void foo<T>(List<T> values) {
  for (var v in values) {
    print(v);
  }
  print(values[0]);
}
void main(){
foo(E1.值);
foo(E2值);
}
枚举E1{a,b}
枚举E2{c,d}
void foo(列出值){
用于(var v值){
印刷品(五);
}
打印(值[0]);
}

“就像传递类类型一样”。我猜您的意思是“类的实例”,因为在Dart中,您也不能对传递的类类型调用静态方法。我还希望在foo中使用值的索引。我能设法得到它吗?如果您可以编辑并添加它。
var values=…
设置为一个值数组。您可以在此行之后使用
值[0]
。您可以直接传递列表,而不是返回列表的函数。
EnumType.values
列表是常量,因此您不会像创建闭包时那样造成任何额外的开销。谢谢,我只是想得太复杂了:-/