可以将泛型类型限制为枚举吗? [复制]

Posted

技术标签:

【中文标题】可以将泛型类型限制为枚举吗? [复制]【英文标题】: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 只是为了记录,事实证明我自己无法删除它,因为它已经收到了答案。我已经标记了它以删除,所以它最终会消失:-) 【参考方案1】:

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

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

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

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

【讨论】:

非常感谢您指出这一点。由于我的问题显然之前已经说过,但我将删除该问题。希望你能接受。 @AndersGustafsson 但以前没有给出这个答案,是吗?我会说,不要删除问题 @dcastro 实际上,它有,虽然不在上面提到的问题中,我认为。 Here 是我找到的一个答案。我会尝试将这个问题添加到上面的帖子中。

以上是关于可以将泛型类型限制为枚举吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在没有泛型类约束的情况下,将泛型类型与其默认值进行比较,会产生编译时错误

是否可以将泛型重载限制为属性类型?

如何将泛型类型参数限制为 System.Enum [重复]

仅适用于数值类型的泛型类型约束

将泛型值推送到 Typescript 中泛型类中的泛型列表

Kotlin 泛型中的 in 和 out