泛型和"二元操作符的一个形参必须是包含类型"错误

本文关键字:quot 形参 类型 错误 一个 包含 二元操作符 泛型 | 更新日期: 2023-09-27 18:04:00

声明二进制操作符时,至少有一个操作数类型必须是包含类型。这听起来是一个很好的设计决策。但是,我没想到下面的代码会导致这个错误:

public class Exp<T>
{
    public static Exp<int> operator +(Exp<int> first, Exp<int> second)
    {
        return null;
    }
}

这个运算符有什么问题?为什么这种情况属于c#的操作符重载限制?允许这种申报有危险吗?

泛型和"二元操作符的一个形参必须是包含类型"错误

因为包含类型是Exp<T>,而不是Exp<int>。你在这里要做的是像c++那样专门化,这在c#中是不可能的。

您在Exp<T>类型的类中,操作符中的两个参数都不是Exp<T>,它们都是Exp<int>