如何在C#中实现多变量同时赋值?求Python等价写法
Python风格多变量同时赋值的C#等价实现
哈哈,这个问题我太懂了!你在Python里用的那种a, b = b, a + b的“同时赋值”——也就是先计算右边所有表达式的值,再一次性赋值给左边变量,避免中间值被覆盖——在C#里其实也有对应的实现,分两种情况给你讲:
1. 最接近Python写法:C# 7.0+的元组解构
从C# 7.0开始,语言支持元组解构,这完全就是Python那种写法的等价实现,代码几乎一模一样:
(a, b) = (b, a + b);
原理和Python完全一致:右边会先计算出(b, a + b)这个元组的所有值(此时用的是赋值前的a和b),然后把这两个值分别赋值给左边的a和b,完全不会出现中间值被覆盖的问题。
举个实际例子,比如用这个写法生成斐波那契数列:
int a = 0, b = 1; for (int i = 0; i < 10; i++) { Console.WriteLine(a); (a, b) = (b, a + b); }
运行结果和Python里用同样逻辑写的代码完全一致。
2. 兼容老版本C#:临时变量法
如果你的项目还在使用C# 7.0之前的版本,那就只能用传统的临时变量过渡了,本质是把原来的a值先存起来,再依次赋值:
// 先保存原始的a值 int originalA = a; // 把b的值赋给a a = b; // 用原始a值加当前b值(也就是原来的b)赋给b b = originalA + b;
这种写法虽然不如元组解构简洁,但逻辑是完全等价的,所有C#版本都支持。
总结一下:如果能用到C# 7.0及以上,元组解构是最优解,写法和Python几乎一样;老版本就用临时变量搞定~
内容的提问来源于stack exchange,提问作者N.Kewitsch
相关产品推荐
相关产品推荐

