字符串枚举

FPGA:

我有一个Enum和函数可以从中创建它,String因为我找不到内置的方法

enum Visibility{VISIBLE,COLLAPSED,HIDDEN}

Visibility visibilityFromString(String value){
  return Visibility.values.firstWhere((e)=>
      e.toString().split('.')[1].toUpperCase()==value.toUpperCase());
}

//used as
Visibility x = visibilityFromString('COLLAPSED');

但是似乎我必须为我拥有的每个Enum重写此函数,有没有办法在将Enum类型作为参数的地方写相同的函数?我试过了,但我发现我不能投给枚举。

//is something with the following signiture actually possible?
     dynamic enumFromString(Type enumType,String value){

     }
罗伯特:

使用镜子,您可以强制某些行为。我有两个想法。不幸的是,Dart不支持键入函数:

import 'dart:mirrors';

enum Visibility {VISIBLE, COLLAPSED, HIDDEN}

class EnumFromString<T> {
  T get(String value) {
    return (reflectType(T) as ClassMirror).getField(#values).reflectee.firstWhere((e)=>e.toString().split('.')[1].toUpperCase()==value.toUpperCase());
  }
}

dynamic enumFromString(String value, t) {
  return (reflectType(t) as ClassMirror).getField(#values).reflectee.firstWhere((e)=>e.toString().split('.')[1].toUpperCase()==value.toUpperCase());
}

void main() {
  var converter = new EnumFromString<Visibility>();

  Visibility x = converter.get('COLLAPSED');
  print(x);

  Visibility y = enumFromString('HIDDEN', Visibility);
  print(y);
}

输出:

Visibility.COLLAPSED
Visibility.HIDDEN

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章