"T:Enum"的<T>类不起作用

Sim*_*gré 15 c# enums templates class

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

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

我想要的是 :

public class<T> ATag where T : enum {
    [Some code ..]
}

public class<T> classBase where T : enum {
    public IDictionary<T, string> tags { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

public enum PossibleTags {
    Tag1, Tag2, Tag3
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Jon*_*eet 27

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

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


Bal*_*a R 6

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

class A<T>
        {
            static A()
            {
                if(!typeof(T).IsEnum)
                {
                    throw new Exception();
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)