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

C#中能否让赋值表达式返回左操作数赋值前的原始值?

能否让赋值表达式返回左操作数修改前的原始值?

我现在能写出这样的代码实现交换:

public static void Swapper (ref int a, ref int b) {
       b = (a = a + b) - b;
       a = a - b;
}

但我希望能写成这样:

public static void Swapper (ref int a, ref int b) {
      a = (b = a);
}

核心需求是:让赋值表达式返回左操作数被修改前的原始值。这是语法层面的问题,我需要适用于所有场景的通用解决方案,而非仅针对上述交换示例。是否可行?


补充说明

我知道可以用元组解构实现交换:

(a, b) = (b, a);

上述交换的例子只是用来演示我想要的语法效果,我并不需要交换变量的功能。本质上,我需要类似++i和i++的区别,实现赋值时返回原始值的效果。


补充说明2

Python中可以通过海象运算符:=实现赋值表达式返回右值的功能。我假设存在一个反向海象运算符=:,它能返回左操作数的原始值。

比如在C#中遍历链表时,用这个假设的运算符可以写成:

while (x != null && y != null) {
    node = (node.next = (x.value > y.value) ? new Node(x =: x.next) : new Node(y =: y.next));
}

而不用写成冗长的版本:

while (x != null && y != null) {
    if (x.value > y.value) {
        node = (node.next = new Node(x));
        x = x.next;
    } else {
        node = (node.next = new Node(y));
        y = y.next;
    }
}

这种写法或许复杂且不常用,但我认为更简洁优雅。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:35:03