如何将泛型约束为类型枚举?

时间:2011-12-31 16:32:29

标签: c# generics type-constraints

请考虑以下代码:

class Base<T>
{
 //Base members
}

我希望通用T是枚举(如果可能,使用约束)。我怎么能在C#中做到这一点?

修改
使用代码契约 - 由Akash Kava引入 - 似乎也是一种很好的方式。我设法让它产生运行时错误,这是无用的。 Here我试过的代码。应该可以生成编译时警告但我无法使其工作。

2 个答案:

答案 0 :(得分:12)

这在IL级别受支持,但在C#中不受支持。您可以查看Jon Skeet撰写的unconstrained melody,它可以让您实现这一目标。这里是相应的blog post,他详细解释了这一点。

答案 1 :(得分:1)

从.NET 4.0开始,您可以使用代码约定http://msdn.microsoft.com/en-us/devlabs/dd491992创建警告,这将让您检查一些前提条件并向开发人员显示警告。