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

C#中重载前缀与后缀--运算符报错问题求助

解决C#重载前缀/后缀--运算符的编译错误

你的代码出现Overloadable binary operator expected错误,核心原因是编译器对后缀--运算符的签名识别异常,同时你的实现逻辑对于值类型(若Rational是结构体)存在无效修改问题,以下是修正方案:

修正后的运算符重载代码

// 前缀--:先修改再返回新值
public static Rational operator --(Rational a)
{
    // 针对值类型,创建新实例避免修改传值副本
    Rational modified = new Rational(a.Mona - a.Mechane, a.Mechane);
    return modified.reduce();
}

// 后缀--:先返回原始值,再触发修改
public static Rational operator --(Rational a, int dummy)
{
    Rational original = new Rational(a.Mona, a.Mechane);
    // 值类型传值修改无效,编译器会自动将变量赋值为前缀--的结果
    return original;
}

关键注意事项

  1. 后缀运算符的签名规范:后缀--必须通过第二个int类型参数区分前缀版本,参数名可任意命名(如dummy),无需对其做无意义赋值。
  2. 值类型的处理逻辑:若Rational是结构体(值类型),传值参数的修改不会影响外部变量,因此前缀运算符需返回新的修改后实例,后缀运算符仅返回原始实例即可,变量的更新由编译器自动处理。
  3. 符合标准行为:前缀--应返回修改后的值,后缀--应返回修改前的原始值,保持与C#内置运算符的行为一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:12:09