类约束必须在任何其他约束之前

Val*_*mas 5 c# generics class

我正在尝试创建以下类名签名:

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)

您必须在约束之前放置基类和接口,否则编译器会认为它们约束.


Ben*_*igt 7

你的意思是class MyClass<T> : MyBase where T : struct