【发布时间】:2026-01-24 21:05:03
【问题描述】:
我们有什么理由不能在 C# 中做到这一点吗?而且,如果可能的话,我怎么能做类似的事情!
我想要什么:
public class<T> ATag where T : enum {
[Some code ..]
}
public class<T> classBase where T : enum {
public IDictionary<T, string> tags { get; set; }
}
所以,到了调用它的时候,我肯定只能得到我的枚举值之一。
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
}
错误信息:"Constraint cannot be special class 'System.Enum'"
谢谢!
【问题讨论】:
-
不可能。在这里查看解决方法:*.com/questions/79126/…
-
顺便说一下,该规范读起来很有趣,很有启发性。每个 C# 程序员都应该熟悉它,当您对语言有疑问时,它应该是您的第一个来源。参看。 10.1.5,特别是对于这个问题。
-
@Jason:是的,C# 4 Annotated Spec 特别精彩。而且我说这不仅仅是因为我贡献了注释 - 所有 other 注释都非常有趣:)
-
@Jon Skeet:我同意,所有的注释都很有见地。
-
@Jon:有更新版本的 C# Annotated Standard 书籍吗?我找不到它。