C#接口与枚举类型参数

3

是否可以将枚举作为接口的类型参数传递,或者有没有其他方法可以达到同样的效果?

例如:

public interface IServiceResponse<R, enumServiceID> {}

Thanks in advance.


这是一个关于编程的内容,需要将其从英文翻译成中文。请返回仅翻译后的文本:这是此链接的副本,该链接已经是此链接的重复之一。 - ForeverZer0
1个回答

2

你正在声明接口,因此类型参数是类型的符号表示,而不是实际的具体类型。你可以放置一个类型参数,希望它是一个枚举类型(比如说TEnum),然后将其限制为值类型(其中TEnum:struct),但是很遗憾,你不能将其限制为枚举。一旦你这样做了,你就可以声明一个实现该接口的类,并使用具体的枚举类型:

public class MyServiceResponse : IServiceResponse<MyRType, EnumServiceId> {  }

更新

如评论中@BJMeyers所指出的,C#现在支持对类型参数进行Enum约束。因此,现在可以像这样做:

public class MyServiceResponse : IServiceResponse<MyRType, TEnumService> where TEnumService : struct, System.Enum 
{
    public TEnumService EnumServiceId { get; set; }
    // ... more code here ...
}

我不确定这是否是你想要的,但如果是,你可以这样做。请注意,在where限制中的struct很重要(记住System.Enum是一个类,而不是结构体)。


3
值得注意的是,C# 7.3 支持 where T : Enum 约束。 - BJ Myers
1
哈利路亚。这么多年来,我默默地多次请求过这个功能。谢谢你告诉我! - Flydog57
4
最后,很高兴了解到这一点,已经迟迟未实现。现在我们需要的是“数字”类型的限制条件... - ForeverZer0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接