You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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实例
  • ?.:表示如果该实例不为null
  • hasStrongStream:返回其hasStrongStream字段的值

当water为null时,表达式应该返回默认值——这和其他C#语言结构的行为一致,比如Type.GetField方法在找不到字段时会返回默认值(null)。

这种简写方式不仅更紧凑,也更容易阅读。

内容的提问来源于stack exchange,提问作者Alberto Martino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 07:03:30