这个简单的条件运算符将在编译时优化吗?(.净)

san*_*983 4 .net c# optimization performance conditional-operator

使用遗留代码,我发现我得到了很多这样的声明(超过500个)

bool isAEqualsB = (a == b) ? true : false;
Run Code Online (Sandbox Code Playgroud)

像这样重写它是否有意义?

bool isAEqualsB = (a == b)
Run Code Online (Sandbox Code Playgroud)

或者将在编译时进行优化?

提前致谢,

桑蒂!=)

Jon*_*eet 8

忽略性能-这是使不可能成为一个瓶颈,这不应该是你怎么想,直到你证明它的相关的适当基准.

绝对会关心可读性 - 从这个角度来看,我认为第二种方法要好得多,而且肯定会使用它.

编辑:在优化方面,看起来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
Run Code Online (Sandbox Code Playgroud)

然而,当然不是IL也不重要 - 这就是JIT编译器的作用.现在即使IL大小的差异也可能意味着内联与否之间的差异......