在 C# 中赋值之前获取赋值表达式的值

问题描述 投票:0回答:2

现在我可以这样做:

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++
.

c# syntax
2个回答
0
投票

您可以使用

tuple
交换值:tuple

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

0
投票

你要求的是不可能的。

来自 C# 规范:“简单赋值表达式的结果是分配给左操作数的值。结果与左操作数具有相同的类型,并且始终被归类为值。”

这在微软的 C# 文档这里.

所以

(b = a)
的结果将是分配给
b
的值。这个赋值表达式不可能以某种方式返回
b
的原始值。

我强烈建议阅读 Eric Lippert 的回答here。 (以及 Eric Lippert 就此主题或任何其他主题提供的任何其他内容。)

© www.soinside.com 2019 - 2024. All rights reserved.