我想检查dart中的值是否为Enum,如果是,则自动对其进行序列化。
我的难点是如何测试值是否为枚举。
这就是我测试其他类型的方式
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
由于所有枚举都具有相同的方法,因此我希望能够对其进行感测并相应地进行处理
答案 0 :(得分:4)
如果需要检查是否为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);
});
P.S .:要获取枚举字符串值,可以很好地使用describeEnum(<enum_value>)
中的package:flutter/foundation.dart
答案 1 :(得分:0)
将enum
转换为list
,然后检查列表中是否包含要检查的值。
enum ObjectType {
TypeA, TypeB
}
ObjectType choiceA = ObjectType.TypeA;
ObjectType choiceB = ObjectType.TypeB;
String stringTypeA = 'ObjectType.TypeA';
bool booleanValue = false;
int intValue = 234;
double doubleValue = 2.345;
print(ObjectType.values.contains(choiceA)); // true
print(ObjectType.values.contains(choiceB)); // true
print(ObjectType.values.contains(stringTypeA)); // false
print(ObjectType.values.contains(booleanValue)); // false
print(ObjectType.values.contains(intValue)); // false
print(ObjectType.values.contains(doubleValue)); // false