C# 比较反射中的基类型

C# 比较反射中的基类型,c#,reflection,C#,Reflection,我正在使用反射对程序集调用一个方法,我需要首先比较该方法的一个参数是否与我为其传递的参数具有相同的基类型 但无论何时调用passedParameter.GetType().BaseType()它都会返回“ {名称= “MarshallByRefObject”全名= “System.MarshalByRefObject”} 它不应该显示它正在实现的接口吗?接口不是基类。类可以实现很多接口 如果您想获得接口列表,只需使用 passedInParameter.GetType().GetInterfac

我正在使用反射对程序集调用一个方法,我需要首先比较该方法的一个参数是否与我为其传递的参数具有相同的基类型

但无论何时调用
passedParameter.GetType().BaseType()
它都会返回“

{名称= “MarshallByRefObject”全名= “System.MarshalByRefObject”}


它不应该显示它正在实现的接口吗?

接口不是基类。类可以实现很多接口 如果您想获得接口列表,只需使用

passedInParameter.GetType().GetInterfaces();
也可以尝试使用运算符

请尝试使用此代码段

    ParameterInfo param = paramList[i]; 
    Type type = paramArray[i].GetType();

    bool valid = false;
    if (info.ParameterType.IsInterface)
        valid = type.GetInterfaces().Contains(param.ParameterType);
    else
        valid = type.IsSubclassOf(param.ParameterType);

运行时有以下帮助程序:

if (typeof(ISomeInterface).IsAssignableFrom(passedInParameter.GetType()))
{
}

背景:

接口不是基类型。CLR类型不能有多个基类型


您应该能够枚举由类型实现的接口,但正如您从我建议的解决方案中看到的,我不建议您将具体类型传递到需要接口的方法参数中。这叫什么?传递它的实现?只传递实现这些类型的对象Interface@Stecya -是的…我就是这么说的。我只是想通过它的基类型来传递它…只是问它的术语是什么。你不需要使用typeof-herdon,我不知道这种传递是否有特殊的术语,我观察到“typeof(SomeType)。IsAssignableFrom(param.GetType())当param是TransparentProxy时,将返回false,而“param是SomeType”将返回true。
if (typeof(ISomeInterface).IsAssignableFrom(passedInParameter.GetType()))
{
}