c# - 可以将泛型类型限制为枚举吗?

标签 c# generics enums

<分区>

我有一个通用类 Foo<T>我想约束的地方 T成为enum类型。这在 C# 中可能吗?

我试过了

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

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

同样,试图约束 T基础 enum type 也不起作用:

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

int不是类或接口(interface)。


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

2018 年 9 月 13 日更新 在最新的次要 C# 版本 7.3 中,现在可以将泛型类型限制为 Enum。 .有关详细信息,请参阅 here .

最佳答案

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

Jon Skeet 创建了一个库来解决这个叫做 Unconstrained Melody 的问题:

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

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

关于c# - 可以将泛型类型限制为枚举吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20002750/

相关文章:

c# - 保护 Web 方法

c# - 无法在 Android 9,10 Xamarin 上获得媒体播放器声音

c# - 在我的 Elasticsearch 嵌套客户端中使用泛型时出错?它无法识别字段。标题

multithreading - 如何将通用 T 发送到另一个线程?

swift - 在 Swift 中,为什么 CodingKey 是我看到的与枚举一起使用的协议(protocol),用于在结构上使用 Codable 协议(protocol)?

c# - 基于调用位置的类型推断

Java 泛型类型参数

java - 将通用枚举从 Java 转换为 Kotlin

c# - 带描述的枚举字符串

c# - jQuery 对话框在 Response.TransmitFile 之后不会从代码隐藏中关闭