【发布时间】:2022-01-26 20:32:49
【问题描述】:
我能找到设置枚举值的唯一方法是: Add methods or values to enum in dart
但是,我觉得它有点乏味。 有没有更好的办法?
在C# 我可以简单地做这样的事情:
enum ErrorCode
{
None = 0,
Unknown = 1,
ConnectionLost = 100,
OutlierReading = 200
}
【问题讨论】:
我能找到设置枚举值的唯一方法是: Add methods or values to enum in dart
但是,我觉得它有点乏味。 有没有更好的办法?
在C# 我可以简单地做这样的事情:
enum ErrorCode
{
None = 0,
Unknown = 1,
ConnectionLost = 100,
OutlierReading = 200
}
【问题讨论】:
这是一个简单的例子
enum ErrorCode {
None,
Unknown,
ConnectionLost,
OutlierReading,
}
extension ErrorCodeExtention on ErrorCode {
static final values = {
ErrorCode.None: 0,
ErrorCode.Unknown: 1,
ErrorCode.ConnectionLost: 100,
ErrorCode.OutlierReading: 200,
};
int? get value => values[this];
}
【讨论】:
Dart 中有一个即将推出的功能,称为增强枚举,它允许使用类中已知的许多功能进行枚举声明。例如:
enum ErrorCode {
None(0),
Unknown(1),
ConnectionLost(100),
OutlierReading(200);
final int value;
const ErrorCode(this.value);
}
该功能尚未发布(请注意,有几件事尚未生效),但可以通过传递--enable-experiment=enhanced-enums 使用适当的新版本工具进行实验。
结果是ErrorCode是一个枚举声明,有四个值ErrorCode.None、ErrorCode.Unknown等等,我们有ErrorCode.None.value == 0和ErrorCode.Unknown.value == 1等等。当前的前沿在公共前端处理这个例子(所以dart 和dart2js 会处理它),但它还没有被分析器处理。
【讨论】: