小编Chr*_*ich的帖子

Dart 中的无开关枚举

我想在 Dart 中做这样的事情

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';
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码有效,但我对开关感到困扰。我有一种直觉,应该有一种方法可以在没有开关的情况下做到这一点——也许可以用地图?但我不知道怎么做。

我试过这个

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];

}
Run Code Online (Sandbox Code Playgroud)

但这显然行不通,因为 dart 说 _description “取决于它自己”。我不明白它如何比带有开关的版本更依赖于自身 - 但是,嘿,编译器是这么说的。这是一个飞镖错误,还是我错过了什么?有没有更好的方法来创建具有辅助吸气剂的枚举?

如果有一种方法不需要输入枚举标识符两次并且必须保持副本对齐,那就太好了——就像面向对象的方法一样。

oop enums hashmap switch-statement dart

0
推荐指数
1
解决办法
54
查看次数

标签 统计

dart ×1

enums ×1

hashmap ×1

oop ×1

switch-statement ×1