C# 是否有机会优化以下代码块?
if (specField == null || AddSystemType(specField, layout)
|| AddEnumType(specField, layout)
|| AddUserType(specField, layout))
{
}
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);
}
}
}
AddSystemType 将执行并可能更改某些状态,因此 IF 中的所有内容都将执行。
使用 AND 时
if(specField == null && AddSystemType()) {
}
然后,如果 specField (始终)为 null,则不会执行并跳过 AddSystemType()(短路评估)