C#是否有可能优化以下代码块?
if (specField == null || AddSystemType(specField, layout)
|| AddEnumType(specField, layout)
|| AddUserType(specField, layout))
{
}
答案 0 :(得分:5)
那么你可以使用ildasm来查看编译器为自己优化的内容。但是如果你期望它完全删除代码,它就不能 - 因为这三个方法调用可能会抛出异常或修改状态。所以它能做的最好就是发出相当于:
if (specField != null)
{
if (!AddSystemType(specField, layout))
{
if (!AddEnumType(specField, layout))
{
AddUserType(specField, layout);
}
}
}
答案 1 :(得分:0)
AddSystemType将执行并可能会更改某些状态,因此IF中的所有内容都将被执行。
使用AND时
if(specField == null && AddSystemType()) {
}
然后,如果specField(总是)为null,则不执行和跳过AddSystemType()(短路评估)