是否可以将枚举作为接口的类型参数传递,或者有没有其他方法可以达到同样的效果?
例如:
public interface IServiceResponse<R, enumServiceID> {}
Thanks in advance.
你正在声明接口,因此类型参数是类型的符号表示,而不是实际的具体类型。你可以放置一个类型参数,希望它是一个枚举类型(比如说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是一个类,而不是结构体)。
where T : Enum
约束。 - BJ Myers