使用遗留代码,我发现我有很多这样的语句(超过 500 个)
bool isAEqualsB = (a == b) ? true : false;
这样重写有意义吗?
bool isAEqualsB = (a == b)
还是会在编译时优化?
提前致谢
桑蒂! =)
最佳答案
忽略性能 - 这所以不太可能成为瓶颈,在您证明它与适当的基准相关之前,您不应该考虑它。
不过,我绝对会关心可读性 - 从这个角度来看,我认为第二种方法要好得多,并且肯定会使用它。
编辑:在优化方面,C# 编译器似乎没有优化它:
// First form
IL_0000: ldarg.0
IL_0001: ldarg.1
IL_0002: beq.s IL_0007
IL_0004: ldc.i4.0
IL_0005: br.s IL_0008
IL_0007: ldc.i4.1
IL_0008: stloc.0
// Second form
IL_0009: ldarg.0
IL_000a: ldarg.1
IL_000b: ceq
IL_000d: stloc.1
但是,重要的当然不是 IL,而是 JIT 编译器所做的事情。现在,即使是 IL 大小的差异也可能意味着内联与非内联之间的差异......
关于c# - 这个简单的条件运算符会在编译时优化吗? (。网),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7986161/