“类,其中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。