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

C#中如何结合OR条件使用is运算符进行模式匹配?

合并C#中多个is运算符的判断逻辑方案

1. C# 9及以上版本:使用OR模式匹配

你可以直接通过or关键字合并多个类型的is判断,不过由于Hoo1和Hoo2是不同类型,编译器无法直接识别它们的共同属性,需要先统一访问方式:

if (foo.Goo is Hoo1 hoo1 or Hoo2 hoo2)
{
    // 通过类型转换或接口统一访问属性
    var target = hoo1 as IHasSomeProperty ?? hoo2 as IHasSomeProperty;
    target.someProperty = ...;
}
else
{
    // 其他分支逻辑
}

2. 更推荐的方案:提取公共接口

既然Hoo1和Hoo2拥有相同的someProperty属性,最优雅的做法是定义一个公共接口,让两个类实现该接口:

// 定义公共接口
public interface IHasSomeProperty
{
    // 根据实际属性类型调整
    string someProperty { get; set; }
}

// 让Hoo1和Hoo2实现接口
public class Hoo1 : IHasSomeProperty 
{
    public string someProperty { get; set; }
    // 其他成员
}

public class Hoo2 : IHasSomeProperty 
{
    public string someProperty { get; set; }
    // 其他成员
}

之后判断逻辑可以大幅简化:

if (foo.Goo is IHasSomeProperty target)
{
    target.someProperty = ...;
}
else
{
    // 其他分支逻辑
}

这种方式既符合面向对象设计原则,也让代码更易维护——后续新增同类别的类时,只需实现接口即可,无需修改判断逻辑。

3. 兼容C# 8及以下版本

如果使用的是旧版本C#,无法使用or模式,依然可以通过接口统一类型来简化代码:

var target = foo.Goo as IHasSomeProperty;
if (target != null)
{
    target.someProperty = ...;
}
else
{
    // 其他分支逻辑
}

若不想定义接口,只能保留原有的分支判断结构,但代码冗余度会更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:00:19