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

时间:2018-07-18 20:46:41

标签: c# .net reflection system.reflection

我正在尝试检查某个Type是否是另一个Type的实例。就像这种简单的方法一样,最好的选择是:

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

这是最佳选择,因为is适用于接口,但不适用于Type且不是常数右操作数。另一个选项是Type.IsSubclassOf(object)不适用于接口。因此,在这种情况下,我需要替换is

2 个答案:

答案 0 :(得分:1)

您可以在两个对象上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;
}

答案 1 :(得分:1)

在发表评论之后,您想检查两种类型的分配。您可以尝试this

Type.IsAssignableFrom(Type c)

  

“如果c和当前Type表示相同类型,或者   当前类型在c的继承层次结构中,或者如果当前   Type是c实现的接口,或者c是泛型类型   参数,当前的Type表示以下约束之一   c。”