我在使用反射的程序集上调用方法,我需要首先比较该方法的某个参数是否具有与我传入的参数相同的基本类型。在反射中比较基本类型
但每当我打电话passedInParameter.GetType().BaseType()
它返回“
{名称= ”MarshalByRefObject的“ 全名= ”System.MarshalByRefObject“}。
它不应该被显示的界面进行正在执行?
我在使用反射的程序集上调用方法,我需要首先比较该方法的某个参数是否具有与我传入的参数相同的基本类型。在反射中比较基本类型
但每当我打电话passedInParameter.GetType().BaseType()
它返回“
{名称= ”MarshalByRefObject的“ 全名= ”System.MarshalByRefObject“}。
它不应该被显示的界面进行正在执行?
运行时对这个助手:
if (typeof(ISomeInterface).IsAssignableFrom(passedInParameter.GetType()))
{
}
新闻背景:
接口是不的基本类型。 CLR类型不能有多个基本类型。
您应该能够枚举由类型实现的接口,但你可以从我提出的解决方案看,我不建议这样做所有
接口不是基类。类可能实现了很多接口 如果你想获得接口列表尖子只是用
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);
+1好答案。 – Stecya 2011-04-27 14:11:04
我注意到,当param是TransparentProxy时,“typeof(SomeType).IsAssignableFrom(param.GetType())”将返回false,而“param is SomeType”将返回true。 – Tom 2013-05-02 19:03:52