如何检查值是否为枚举?

时间:2018-12-25 16:55:46

标签: dart

我想检查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);

但是我似乎无法将Tenum

进行比较

由于所有枚举都具有相同的方法,因此我希望能够对其进行感测并相应地进行处理

2 个答案:

答案 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