比较反射中的基类型

时间:2011-04-27 12:54:42

标签: c# reflection

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

但每当我打电话给passedInParameter.GetType().BaseType()时,它都会返回“

  

{姓名=   “MarshalByRefObject”FullName =   “System.MarshalByRefObject”}。

它不应该显示它正在实现的界面吗?

2 个答案:

答案 0 :(得分:4)

运行时有这样的帮助:

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

背景:

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

你应该能够枚举一个类型实现的接口,但正如你从我提出的解决方案中看到的那样,我不建议你做所有这些

答案 1 :(得分:2)

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

passedInParameter.GetType().GetInterfaces();

您也可以尝试使用is运算符

if(passedInParameter is ISomeInterface)
{
    // do some logic
}

尝试使用此代码段

    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);