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
相关产品推荐
相关产品推荐

