我正在尝试创建以下类名签名:
public class MyClass<T> where T : struct, MyBase
Run Code Online (Sandbox Code Playgroud)
(我使用struct来约束枚举)
我收到了错误
The class type constraint 'MyBase' must come before any other constraints
Run Code Online (Sandbox Code Playgroud)
我理解这条消息,然而,重新安排我无法通过的代码或其他一些语法错误.如果有的话,我该怎么办?
如果必须的话,我会删除struct.
谢谢
Eri*_*ert 16
约束是"和"在一起的; 必须满足所有约束条件.
在什么情况下,T既可以是不可为空的值类型,也可以通过标识,装箱或引用转换隐式转换为MyBase类?
没有这样的情况,因此没有可能的类型参数满足T的约束.而不是让你定义一组无法满足的约束,编译器根本不允许它.您不能声明您同时需要struct约束和class type约束.
我正在使用struct来约束Enums
这说明了我的观点.由于没有继承的枚举,MyBase因此无法满足约束.
你能描述一下你的想法吗?例如,您是否认为它意味着"任何不可空的值类型或任何可转换为MyBase的类型"?我有兴趣了解为什么人们会相信C#的错误信息,以便我可以尝试改进它.
更新:啊,我明白了 - MyBase打算成为基类MyClass<T>,而不是基类T.在C#中,它会:
class [class name] < [generic type parameters] >
: [base classes and interfaces]
where [type parameter] : [constraints]
Run Code Online (Sandbox Code Playgroud)
您必须在约束之前放置基类和接口,否则编译器会认为它们是约束.