C#中是否存在简写避免`provider && provider.isOkay`重复实例名?
C#中是否有简写替代
provider && provider.isOkay? 先看以下代码示例:
定义Provider类
public class Provider { public bool isOkay; }
Consumer类使用Provider实例
public class Consumer { public Provider provider; // 可能为 null,也可能不为 null public bool IsProviderOkay() { return provider && provider.isOkay; } }
我想知道,在C#里有没有一种简写方式,不用重复写provider就能实现provider && provider.isOkay的逻辑?
看起来provider?.isOkay这种写法很理想,但会触发编译错误——因为这是在试图把bool?隐式转换为bool。我猜编译器是不确定provider为null时该返回什么值,但我觉得这个理由不够充分,具体解释如下:
(注:以下只是示例,我知道可以用变量、方法等其他方式解决)
假设我有一个由多个或运算组成的长逻辑表达式:
a || b || c || d || ... || z
其中每个元素(a到z)都是provider && provider.isOkay这种形式,比如:
(water && water.hasStrongStream) || (steep && steep.isDangerous) || /*... ||*/ (mind && mind.isOverthinking);
这类表达式元素的含义是:如果某个模块(比如water)存在,就考虑它的状态(hasStrongStream);如果模块不存在(为null),就直接忽略这个条件。
所以我认为water?.hasStrongStream这种写法更简洁易读,它的逻辑可以拆解为:
water:指代一个Water实例?.:表示如果该实例不为nullhasStrongStream:返回其hasStrongStream字段的值
当water为null时,表达式应该返回默认值——这和其他C#语言结构的行为一致,比如Type.GetField方法在找不到字段时会返回默认值(null)。
这种简写方式不仅更紧凑,也更容易阅读。
内容的提问来源于stack exchange,提问作者Alberto Martino
相关产品推荐
相关产品推荐

