我有一个看起来像这样的结构:
public struct Vector2d<T> where T : Unit {
public double x;
public double y;
...
public static Vector2d<Length> operator * (Vector2d<Speed> speed, Vector2d<Duration> duration) {
return new Vector2d<Length>(speed.x * duration.x, speed.y * duration.y);
}
}
长度,速度和持续时间类型都是单位的子类型。(T也继承自Unit)
但是,编译器说:
二进制运算符的参数之一必须是包含类型。
这让我感到奇怪,因为提供的类型是包含类型的子类。
为什么我试图做违法的事情?
我知道Vector2不是Vector2的子类,但是我没有尝试使用泛型类型的值。运算符中使用的所有数据都是Vector2类。
根据此错误的MSDN页面:
二进制运算符的定义指定了两个参数,它们的类型不同于定义该运算符的类或结构的类型。在类或结构中定义运算符时,至少一个参数必须是该类或结构的类型。
在您的情况下,您的运算符未使用Vector2d<T>
类型(您正在使用Vector2d<Speed>
和Vector2d<Duration>
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句