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项目.您可以自己使用相同的方法.我同时写了一篇博文,详细介绍了这篇文章.
这是不可能的.但如果您对运行时检查感兴趣,可以这样做
class A<T>
{
static A()
{
if(!typeof(T).IsEnum)
{
throw new Exception();
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14799 次 |
最近记录: |