我有一个整数,我想在Dart中转换成一个枚举。我想用泛型来做这件事,这样我就不必为每种可能的枚举一次又一次地编写相同的代码。
我知道如何对一种特殊的枚举per this answer执行此操作,方法是像这样使用索引操作符[]
T get notQuiteGenericEnumGetter {
int i = fromSomeplace();
if (T == MyEnum) {
return MyEnum.values[i] as T;
}else if (T ==
// tests for other sorts of enumes
}
但我真正想要的是泛型地完成这件事,这样我就不需要一长串的if语句,每个可能的枚举都有一个if语句,我宁愿使用泛型来做这样的事情。
T get genericEnumGetter {
int i = fromSomeplace();
if (T == Enum) {
return T.values[i] as T;
}
}
但是如果我将enum拼写为“enum”(未定义的名称)或“Enum”(getter value不是为Type定义的),这就不起作用了。
我也尝试了return (T as Enum).values[i] as T;
,我被告知getter 'values'不是为'Enum'类型定义的,这让我想知道MyEnum.values是如何工作的。
所以我想我的问题是,在没有显式测试枚举风格的情况下将int转换为枚举的想法是没有希望的,还是有一些方法可以通用地将整数转换为枚举。
1条答案
按热度按时间33qvvth11#
你想做的事情是不可能的,原因有很多。
Enum
类,T.anything
也永远不能工作,因为static
成员不是Dart中类接口的一部分。static
成员本质上是全局变量的语法糖。为Enum
类型自动生成的values
列表没有什么不同。即使Dart允许泛型getter(或者如果您将其更改为普通泛型函数),您也需要显式指定
Enum
类型名称(从哪里推断出来?),此时您还可以键入MyEnum.values[i]
,这只是稍微有点不方便。我也尝试了
return (T as Enum).values[i] as T;
,我被告知getter 'values'不是为'Enum'类型定义的,这让我想知道MyEnum.values是如何工作的。Enum
是用enum
声明的基类型。Enum
本身没有values
成员;Enum
没有值!只有用enum
声明的具体类型才有合成的values
成员。(另见Where is "values" defined in a List of enum?)