代码之家  ›  专栏  ›  技术社区  ›  Kacper

用运行时已知的对象类型替换“is”

  •  1
  • Kacper  · 技术社区  · 6 年前

    我想看看有没有 Type 是另一个的实例 类型 . 就像这个简单的方法一样,最好的选择是:

    bool Example(Type instance, Type runtimeKnwownType) {
        return instance is runtimeKnwownType;
    }
    

    这是最好的选择,因为 is 与接口一起工作,但与 类型 而不是常量右操作数。另一种选择是 Type.IsSubclassOf(object) 不适用于接口。所以我的问题是 在这种情况下。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Antoine V    6 年前

    在您的评论之后,您需要检查两种类型的分配。你能试试吗 this :

    Type.IsAssignableFrom(Type c)

    “如果c和当前类型表示同一类型,或者如果 当前类型在c的继承层次结构中,或者 类型是C实现的接口,或者如果C是泛型类型 参数和当前类型表示 “c.”

        2
  •  1
  •   JSteward    6 年前

    你可以 GetType 在两个对象上:

    public Class1 abc;
    public Class2 def;
    public void Test()
    {
        if (abc.GetType() == def.GetType())
        {
    
        }
    }
    

    或者

    public bool Example(Type instance, Type runtimeKnwownType)
    {
        return instance == runtimeKnwownType;
    }