2013-10-24 76 views
2

有沒有可能C#會優化下面的代碼塊?c#編譯器是否會優化空塊

if (specField == null || AddSystemType(specField, layout) 
         || AddEnumType(specField, layout) 
         || AddUserType(specField, layout)) 
{ 
} 
+1

構建代碼,然後找出使用ILDASM: -P –

+0

坦率地說,我不知道你的意思。你可以請更具體嗎? –

+0

我原以爲沒有。這些方法可能有副作用。 – Baldrick

回答

5

那麼你可以使用ildasm來查看編譯器爲自己優化了什麼。但是,如果您期望它完全刪除代碼,它不能 - 因爲這三個方法調用可能會拋出異常或修改狀態。因此,它能做的最好的是發出相當於:

if (specField != null) 
{ 
    if (!AddSystemType(specField, layout)) 
    { 
     if (!AddEnumType(specField, layout)) 
     { 
      AddUserType(specField, layout); 
     } 
    } 
} 
+0

你的例子不等於cond ||條件。 您可以使用&&和短路評估將阻止執行第二個條件 –

0

的AddSystemType將執行,並可能改變一些狀態,所以一切都在IF將被執行。

使用和

if(specField == null && AddSystemType()) { 

} 

那麼如果specField是(總是)空,AddSystemType()不執行,跳過(短路評價)