【问题标题】:Possible to constrain generic type to enums? [duplicate]可以将泛型类型限制为枚举吗? [复制]
【发布时间】:2013-11-15 13:58:48
【问题描述】:

我有一个通用类Foo<T>,我想将T 约束为enum 类型。这在 C# 中可行吗?

我试过了

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

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

同样,尝试将 T 约束为基础 enum 类型也将不起作用:

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

因为int 不是类或接口。


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

2018 年 9 月 13 日更新 在最新的次要 C# 版本 7.3 中,现在可以将泛型类型限制为 Enum。详情请见here

【问题讨论】:

  • 你是对的。我将删除这个问题。无论如何,感谢那些提供信息丰富的答案的人。
  • @AndersGustafsson 公平竞争。
  • @OndrejJanacek 可以肯定的是,您的意思是非讽刺性的,对吧?在这种情况下,谢谢。我有点有点担心删除这个问题,因为其他人已经收到了他们的回答的赞成票。
  • @AndersGustafsson 是的,这并不讽刺。你的问题迟早会被删除,所以当你意识到你的错误并且你可以自己删除它时,为什么还要打扰模组呢?
  • @Ondrej 只是为了记录,事实证明我自己无法删除它,因为它已经收到了答案。我已经标记了它以删除,所以它最终会消失:-)

标签: c# generics enums


【解决方案1】:

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

Jon Skeet 制作了一个名为 Unconstrained Melody 的库来解决这个问题:

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

虽然我从未使用过它,所以我无法提供任何关于如何利用它的见解。

【讨论】:

  • 非常感谢您指出这一点。由于我的问题显然之前已经说过,但我将删除该问题。希望你能接受。
  • @AndersGustafsson 但以前没有给出这个答案,是吗?我会说,不要删除问题
  • @dcastro 实际上,它有,虽然不在上面提到的问题中,我认为。 Here 是我找到的一个答案。我会尝试将这个问题添加到上面的帖子中。
猜你喜欢
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 2020-06-09
相关资源
最近更新 更多