【发布时间】:2019-09-09 14:01:16
【问题描述】:
请记住similar question 在变量硬编码为 1 的情况下,C#/Roslyn 是否省略乘以 1?类似问题的答案表明 Roslyn 会在编译时将 var x = 5 * 1 转换为 var x = 5,但我想知道这是否适用于更复杂的示例。
例子:
var baseAmount = 25.10M;
var multiplier = 1;
var total = baseAmount * multiplier; // does this become just "baseAmount"?
最终,我试图确定添加 * 1 或等效项是否会导致大规模的性能影响(代码命中数百万次)。在这种情况下,使用 * 1 乘法明确和冗长将为代码库的新手带来更易读的“自我注释”代码。
【问题讨论】:
-
由于
baseAmount是一个小数,乘法仍然会进行。如果它是一个 int,它可能会被省略。但是,正如我在之前的评论中所暗示的那样,它几乎可以肯定是不相关的。 “数百万”次不会引起注意。 -
您是否尝试对其进行基准测试?
-
当然,但我倾向于从这里更有经验的开发人员那里获得更多信息(例如,Roslyn 所做的取决于 baseAmount 是小数(或我假设为双精度)还是整数)。我可能会错过。
标签: c# compilation