中的复合赋值.净值



我想知道这在中是否曾经是或现在仍然是一种情况。网

使用exp+=val而不是exp=exp+val。由于exp可以任意复杂,这可能导致大量不必要的工作。这强制JIT评估exp的两个副本,并且很多时候这是不需要。第一个语句可以比其次,因为JIT可以避免对exp求值两次。

这来自代码项目中的一篇古代文章。

cpp中还有另一个:

但是,复合赋值表达式并不等价于扩展版本,因为复合赋值表达式计算expression1仅一次,而扩展版本计算expression1两次:在加法运算和赋值中活动

是的,它过去是,现在仍然是中的最佳实践。NET。要在中添加4的图像

myObject.MyExpensiveMethod().MyProperty

显然你不想做:

myObject.MyExpensiveMethod().MyProperty = 
myObject.MyExpensiveMethod().MyProperty + 4;

因为它调用昂贵的方法两次,而+=只调用它一次。你可以做:

var temp = myObject.MyExpensiveMethod();
temp.MyProperty = temp.MyProperty + 4;

这是较少昂贵,但最便宜的做法:

myObject.MyExpensiveMethod().MyProperty += 4;

由于昂贵的方法只调用一次。

另一种情况是,当你使用一种只想调用一次的具有副作用的方法时:

myFactory.GetNextObject().MyProperty += 5;

你肯定不会做

myFactory.GetNextObject().MyProperty = myFactory.GetNextObject().MyProperty + 5;

您可以再次使用临时变量,但复合赋值运算符显然更简洁。

诚然,这些都是边缘案例,但这并不是一个坏习惯。

最新更新