给出以下示例类:
class Foo<T>
{
void Bar<S>(T inputT, S inputS)
{
// Some really magical stuff here!
}
}
如果我反映方法Foo<>.Bar<>(...)
,并检查参数类型,请说:
var argType1 = typeof(Foo<>).GetMethod("Bar").GetParameters()[0].ParameterType;
var argType2 = typeof(Foo<>).GetMethod("Bar").GetParameters()[1].ParameterType;
argType1
和argType2
看起来相似:
FullName
属性为null Name
属性是&#34; T&#34;或&#34; S&#34;分别IsGenericParameter
是真的参数类型信息中是否有任何内容允许我区分第一个参数是在类型级别定义的,而第二个参数是方法级别的类型参数?
答案 0 :(得分:3)
我想,就像这样:
public static bool IsClassGeneric(Type type)
{
return type.IsGenericParameter && type.DeclaringMethod == null;
}
在代码中:
class Program
{
static void Main(string[] args)
{
new Foo<int>().Bar<int>(1,1);
}
class Foo<T>
{
public void Bar<S>(T a, S b)
{
var argType1 = typeof(Foo<>).GetMethod("Bar").GetParameters()[0].ParameterType;
var argType2 = typeof(Foo<>).GetMethod("Bar").GetParameters()[1].ParameterType;
var argType1_res = Ext.IsClassGeneric(argType1);//true
var argType2_res = Ext.IsClassGeneric(argType2);//false
}
}
}