有沒有可能C#會優化下面的代碼塊?c#編譯器是否會優化空塊
if (specField == null || AddSystemType(specField, layout)
|| AddEnumType(specField, layout)
|| AddUserType(specField, layout))
{
}
有沒有可能C#會優化下面的代碼塊?c#編譯器是否會優化空塊
if (specField == null || AddSystemType(specField, layout)
|| AddEnumType(specField, layout)
|| AddUserType(specField, layout))
{
}
那麼你可以使用ildasm來查看編譯器爲自己優化了什麼。但是,如果您期望它完全刪除代碼,它不能 - 因爲這三個方法調用可能會拋出異常或修改狀態。因此,它能做的最好的是發出相當於:
if (specField != null)
{
if (!AddSystemType(specField, layout))
{
if (!AddEnumType(specField, layout))
{
AddUserType(specField, layout);
}
}
}
你的例子不等於cond ||條件。 您可以使用&&和短路評估將阻止執行第二個條件 –
的AddSystemType將執行,並可能改變一些狀態,所以一切都在IF將被執行。
使用和
if(specField == null && AddSystemType()) {
}
那麼如果specField是(總是)空,AddSystemType()不執行,跳過(短路評價)
構建代碼,然後找出使用ILDASM: -P –
坦率地說,我不知道你的意思。你可以請更具體嗎? –
我原以爲沒有。這些方法可能有副作用。 – Baldrick