dart - 如何检查值是否为枚举?
问题描述
我想检查 dart 中的值是否是枚举,如果是,则自动序列化它。
我的症结是如何测试一个值是否是一个枚举。
这就是我测试其他类型的方式
if (T == int)
val = prefs.getInt(this._key);
else if (T == double)
val = prefs.getDouble(this._key);
else if (T == bool)
val = prefs.getBool(this._key);
else if (T == String)
val = prefs.getString(this._key);
else if ([""] is T)
val = prefs.getStringList(this._key);
但我似乎无法T
与enum
由于所有枚举都有相同的方法,我希望能够感知它们并相应地处理它们
解决方案
如果需要检查是dynamic
值枚举类型。您可以使用下一种方法。主要思想与@Oniya Daniel 的回答非常相似。
enum Fruit {
banana,
apple,
orange,
}
下一个检查isEnum
条件的方法
bool isEnum(dynamic data) {
final split = data.toString().split('.');
return split.length > 1 && split[0] == data.runtimeType.toString();
}
测试结果如下
test('check enum runtime', () {
expect(isEnum(Fruit.banana), true);
expect(isEnum(null), false);
expect(isEnum(''), false);
expect(isEnum('banana'), false);
});
PS:describeEnum(<enum_value>)
从package:flutter/foundation.dart
推荐阅读
- javascript - 使 setTimeout 无限
- javascript - 如何通过单击单元格更改颜色
- javascript - 如何清理 useEffect 函数?
- r - R while 在一天中的特定时间循环
- c - Mindstorms 的robotc **错误**:未定义的变量“sonarSensor”。假设为“短”
- sql - 不支持数据类型间隔 - Spark SQL
- javascript - 使用 JavaScript 动态生成 HTML 元素列表的最佳方法是什么?
- javascript - 在没有输入字段的情况下使用新复选框刷新 javascript 计算的总和
- c++ - MSVC2019 静态库中缺少符号名称
- android - 如何使用 ejabberd 聊天应用程序通过 API 层传递服务器