如何为null合并操作添加条件,仅当overrideRequired为true时执行GetOverrideColor?
条件化null合并运算符的实现方案
问题描述
现有一段使用null合并运算符的简写代码:
return GetOverrideColor(overrideFlags, colorUsage) ?? GetColor(colorExpression, field, purpose, defaultColor);
希望给这段代码添加额外条件:仅当overrideRequired为true时才执行GetOverrideColor方法,对应的长写法实现如下:
CustomColor color = null; if (overrideRequired) color = GetOverrideColor(overrideFlags, colorUsage); if (color == null) color = GetColor(colorExpression, field, purpose, defaultColor); return color;
请问能否用简写形式实现该逻辑?
解决方案
完全可以实现,只需用三元运算符配合null合并运算符,就能在保持简写风格的同时满足条件需求:
return (overrideRequired ? GetOverrideColor(overrideFlags, colorUsage) : null) ?? GetColor(colorExpression, field, purpose, defaultColor);
逻辑解释
- 当
overrideRequired为true时,执行GetOverrideColor方法,将其结果与GetColor的结果做null合并:如果前者不为null则返回前者,否则返回后者。 - 当
overrideRequired为false时,三元运算符返回null,此时null合并运算符会直接执行并返回GetColor的结果,和长写法的逻辑完全一致。
内容的提问来源于stack exchange,提问作者Mark Clayton
相关产品推荐
相关产品推荐

