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

如何判断SuperClass实例具体是SubClass1还是SubClass2专属实例?

解决方案

针对你的需求,分两种场景给出实现方式:

场景1:判断参数是SubClass1的实例(包含其子类),但不是SubClass2的实例

如果允许arg是SubClass1的子类实例,仅需要排除SubClass2及其子类的情况,直接用C#类型检查语法即可:

public void DoStuff(SuperClass arg)
{
    if (arg is SubClass1 && arg is not SubClass2)
    {
        var data = (SubClass1)arg;
        // 执行操作
    }
}

如果使用C# 9.0之前的版本,不支持is not语法,可以用逻辑非代替:

if (arg is SubClass1 && !(arg is SubClass2))

场景2:判断参数的实际类型恰好是SubClass1(不包含其子类)

如果需要严格判断arg的类型就是SubClass1本身,而非它的任何子类,通过GetType()和typeof()对比实现:

public void DoStuff(SuperClass arg)
{
    if (arg.GetType() == typeof(SubClass1))
    {
        var data = (SubClass1)arg;
        // 执行操作
    }
}

同理,判断仅为SubClass2实例的代码为:

if (arg.GetType() == typeof(SubClass2))
{
    var data = (SubClass2)arg;
    // 执行对应操作
}

补充说明

  • is关键字会检查实例是否是指定类型或其派生类型的实例
  • GetType()返回对象的实际运行时类型,typeof()返回指定类型的Type对象,两者对比可实现严格的类型匹配
  • 当前代码中SubClass1和SubClass2无继承关系,判断arg is SubClass1时自然不会是SubClass2的实例,但保留&& arg is not SubClass2能应对未来类结构变化的情况,更严谨。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 09:25:01