关于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。有关详细信息,请参阅此处。

  • 你是对的。我将删除此问题。不管怎样,感谢你们中那些提供了丰富的答案的人。
  • @安德斯古斯塔夫森公平竞争。
  • @只是为了确定,你的意思是用一种非讽刺的方式,对吗?那样的话,谢谢。我有点担心把这个问题去掉,因为其他人的回答都得到了赞成票。
  • @是的,这不是讽刺。你的问题迟早会被删除,所以当你意识到你的错误,你可以自己删除它时,为什么还要麻烦mods?
  • @只是为了记录,结果是我自己不能移除它,因为它已经收到了一个答案。不过,我已将其标记为删除,因此它最终将消失:—)


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

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

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

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

  • 非常感谢您指出这一点。因为我的问题显然已经在前面陈述过,所以我将删除这个问题。希望你能接受。
  • @安德斯古斯塔夫森,但这个答案以前没有给出过,是吗?我会说,不要删除这个问题
  • @事实上,我认为,虽然在上面提到的问题中没有。这是我找到的一个答案。我会把这个问题加到上面的帖子里。