Dart中的无开关枚举

xlpyo6sf  于 2023-02-17  发布在  其他
关注(0)|答案(1)|浏览(156)

我想在达特做这样的事情

enum Result {
  dns,
  dnf,
  dnq,
  finish,
  active;

  get description {
    switch(this){
    case dns: return 'Not Started';
    case dnf: return 'Disqualified';
    case dnq: return 'Disqualified';
    case finish: return 'Finished';
    case active: return 'Underway';
    }
  }
}

上面的代码可以工作,但是我被开关所困扰。我有一种直觉,应该有一种方法可以不用开关来完成这件事--也许用一个Map?但是我不知道怎么做。
我试过这个

enum Result {
  dns,
  dnf,
  dnq,
  finish,
  active;

  final Map  _description = {
    dns: 'Not Started',
    dnf: 'Disqualified',
    dnq: 'Disqualified',
    finish: 'Finished',
    active: 'Underway'
  };

  get description => _description[this];

}

但显然这行不通,因为dart说_description“依赖于自身”。我看不出它对自身的依赖程度比带开关的版本更高--但是,嘿,编译器是这么说的。这是dart的bug,还是我遗漏了什么?有没有更好的方法来创建具有辅助getter的枚举?
如果有一种方法不需要键入两次枚举标识符,也不需要保持副本对齐,那就太好了--就像OO方法一样。

s8vozzvw

s8vozzvw1#

你可以这样做:

enum Result {
  dns('Not Started'),
  dnf('Did Not Finish'),
  dnq('Disqualified'),
  finish('Finished'),
  active('Underway');
  
  const Result(this.description);
  
  final description;
}

相关问题