“类,其中T:Enum”不起作用

可能重复:
创建将T限制为枚举的通用方法

我们有什么理由不能在C#中做到这一点吗? 而且,如果可能的话,我该怎么做类似的事情!

我想要的是 :

public class ATag where T : enum { [Some code ..] } public class classBase where T : enum { public IDictionary tags { get; set; } } 

所以,当它到了调用它的时候,我只能得到一个我的枚举值。

 public class AClassUsingTag : classBase { public void AMethod(){ this.tags.Add(PossibleTags.Tag1, "Hello World!"); this.tags.Add(PossibleTags.Tag2, "Hello Android!"); } } public enum PossibleTags { Tag1, Tag2, Tag3 } 

错误消息: "Constraint cannot be special class 'System.Enum'"

谢谢!

你不能这样做,因为规范说你不能,基本上。 这很烦人,但就是这样。 CLR支持它没有问题。 我的猜测是,当首次设计仿制药时,CLR可能不会支持它,所以它在语言中也被禁止了……并且C#团队没有得到关于它的备忘录然后被支持,或者它是来不及包括它。 代表们也同样烦人。

至于解决方法……看看我的Unconstrained Melody项目。 您可以自己使用相同的方法。 我同时写了一篇博文 ,详细介绍。

这是不可能的。 但是如果你对运行时检查感兴趣,你可以这样做

 class A { static A() { if(!typeof(T).IsEnum) { throw new Exception(); } } } 

不,我不相信。 是使用设计模式来绕过它,让基类返回允许的类型,派生类可以检查它。

HTH。