dart 在枚举列表中定义的“值”在哪里?

qacovj5a  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(103)

我有一个enum,我可以在上面使用MyColors.values,但是这个values是在哪里定义的呢?

enum MyColor {
  red,
  blue,
  green,
}

enum MyNumbers {
  one,
  two,
  three,
}

void main() {
  getNames(MyColor.values);
  getNames(MyNumbers.values);
}

List<String> getNames(List<Enum> enums) {
  return enums.values.map((e) => e.name).toList(); // Error
}

那么我如何使用values呢?

t40tm48m

t40tm48m1#

enum MyColor { red, blue, green }创建了一个特殊的MyColorEnum类,并创建了它的编译时常量 * 示例 *,命名为redbluegreen
来自Dart语言规范的Enums部分:

(抱歉使用图片;将其重新格式化为Markdown太不切实际了。)

List<String> getNames(List<Enum> enums) {
  return enums.values.map((e) => e.name).toList(); // Error
}

您的enums参数是List,而List没有value成员。getNames的调用方已经传递了Enum值的列表。您需要:

List<String> getNames(List<Enum> enums) {
  return enums.map((e) => e.name).toList();
}

或:

List<String> getNames(List<Enum> enums) {
  return [for (var e in enums) e.name];
}

什么是MyColor,这是一个Enum(否),这是一个List<Enum>,再次否?
MyColor本身是Type,就像intdoubleStringList一样。
MyColor.redMyColor的编译时常量 instanceMyColor.red is MyColorMyColor.red is Enum都为true。
这与以下情况没有根本区别:

class Base {}
class Derived extends Base {}

DerivedBaseType对象。Derived is Base为false(Type对象不是Base的示例)。但是,Derived() is Base为true。

相关问题