2011-04-27 50 views
5

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

但每当我打电话passedInParameter.GetType().BaseType()它返回“

{名称= ”MarshalByRefObject的“ 全名= ”System.MarshalByRefObject“}。

它不应该被显示的界面进行正在执行?

回答

4

运行时对这个助手:

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

新闻背景:

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

您应该能够枚举由类型实现的接口,但你可以从我提出的解决方案看,我不建议这样做所有

+0

+1好答案。 – Stecya 2011-04-27 14:11:04

+0

我注意到,当param是TransparentProxy时,“typeof(SomeType).IsAssignableFrom(param.GetType())”将返回false,而“param is SomeType”将返回true。 – Tom 2013-05-02 19:03:52

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

可以传递的具体类型成期待一个方法的参数接口。那叫什么?通过实施? – Gho5t 2011-04-27 13:00:40

+0

你只是通过实现这些接口的对象 – Stecya 2011-04-27 13:04:30

+0

@Stecya - 正确的......这就是我所说的。我只是认为这被称为传递其基本类型......只是问这个术语是什么。 – Gho5t 2011-04-27 13:06:59