【发布时间】:2012-01-03 18:16:55
【问题描述】:
几天前我问了一个题为How to constraint a generic to be of type enum?的问题。总结问题是以下代码:
class MyClass<T> where T : enum // Not possible in C#
{
}
我被介绍了代码契约,并且我可以针对该问题生成一个编译时警告,这就是我想要的(在编译时被告知 T 应该是 enum)。我尝试了以下代码 (Full source)。
class MyClass<T>
{
public MyClass()
{
Contract.Requires(typeof(System.Enum).IsAssignableFrom(typeof(T)));
}
}
它只会产生一个无用的运行时错误。我应该能够产生编译时警告,但我无法让它工作。谁能告诉我我做错了什么?
这是项目代码合同设置的图片:
【问题讨论】:
-
您是否使用了该问题已接受答案中建议的库?
-
@Oded,我试过了,但是没有示例代码,所以我什至不知道从哪里开始。虽然这是另一个问题,但我发现这是一种更好的方法,因为它已经是 .NET 框架的一部分。
-
@AtoMerZ:Unconstrained Melody 旨在用作库,但您可以对自己的代码使用相同的 IL 重写。看看代码 - 非常简单。
-
您是否在相关项目中启用了“执行静态检查”?
-
@JonSkeet,我得到了 NuGet,在我的项目中添加了不受约束的旋律,之后我不知道我应该做什么。编写类
MyClass<T> where T:enum时仍然出现错误。你能提供一个如何使用它的示例吗?
标签: c# inheritance enums constraints code-contracts