2

C# 是否有机会优化以下代码块?

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

2 回答 2

5

好吧,您可以使用 ildasm 来查看编译器为自己优化了什么。但是,如果您希望它完全删除代码,它就不能——因为这三个方法调用可能会引发异常或修改状态。所以它可以做的最好的就是发出相当于:

if (specField != null)
{
    if (!AddSystemType(specField, layout))
    {
        if (!AddEnumType(specField, layout))
        {
            AddUserType(specField, layout);
        }
    }
}
于 2013-10-24T13:48:24.950 回答
0

AddSystemType 将执行并可能更改某些状态,因此 IF 中的所有内容都将执行。

使用 AND 时

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

}

然后,如果 specField (始终)为 null,则不会执行并跳过 AddSystemType()(短路评估)

于 2013-10-24T13:50:18.130 回答