关于c#:可以将泛型类型约束到枚举?

Possible to constrain generic type to enums?

本问题已经有最佳答案,请猛点这里访问。

我有一个通用类Foo,在这里我想将T约束为enum类型。这在C中是可能的吗?

我试过了

1
public class Foo<T> where T : enum   // COMPILATION ERROR

但这种方法似乎只适用于classstruct

同样,试图将T约束到底层enum类型也不会起作用:

1
public class Foo<T> where T : int    // COMPILATION ERROR

因为int不是类或接口。

编辑我现在意识到类似的问题已经发布过,最终这个问题可以被删除。这是一个与我的问题更相关的问题,也包含如下相同的答案。

更新2018年9月13日,在最新的minor c版本7.3中,现在可以将泛型类型约束到enum。有关详细信息,请参阅此处。


这在C规范和实现中无效,但它在IL中。

乔恩·斯基特制作了一个图书馆,以避开这种被称为"无约束旋律:

https://code.google.com/p/unconstrained-melody/

虽然我从未使用过它,所以我无法提供任何洞察如何利用它。