You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在泛型类Matrix<T>中仅当T支持+运算符时重载该运算符?

泛型矩阵类的运算符重载问题

我定义了如下泛型矩阵类:

class Matrix<T>
{
    private T[,] _data;
}

能否仅当*泛型参数*重载了+运算符时,为Matrix<T>重载+运算符?

近期写了很多Rust代码,我原本期望以下写法可行:

class Matrix<T>
{
    private T[,] _data;

    public static Matrix<T> operator+(Matrix<T> lhs, Matrix<T> rhs)
        where T: IAdditionOperators<T>
    {
        // ...
    }
}

遗憾的是,where约束只能应用于方法自身的泛型参数,而非包含该方法的类的泛型参数。

我知道可以去掉where约束,在方法体内使用dynamic执行加法操作,但这种方式的性能影响不符合我的需求。

有类似场景的问题可通过C# 11中的新接口IAdditionOperators<T>解决,但我希望Matrix<T>同时也能支持未重载+运算符的T类型(允许运行时检查)。

是否可以通过子类和隐式转换来实现?


内容的提问来源于stack exchange,提问作者Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:40:03