C#Reflection - 在泛型类中委派

时间:2016-11-16 02:49:40

标签: c# reflection

// case1
public class A<T> {
    public delegate bool Compare(T a, T b);
}

// case2
public class A {
    public delegate bool Compare<T>(T a, T b);
}

Test(typeof(A<>.Compare));
Test(typeof(A.Compare<>));

void Test(Type type)
{
    // #1
}

我的问题:

如何在位置#1中编写代码以告诉类型是case1还是case2?

似乎

之间没有区别
typeof(A<>.Compare).GetGenericArguments()[0]

typeof(A.Compare<>).GetGenericArguments()[0]

谢谢!

------------- ----------------编辑

我想知道的是T型的来源。 T是在A中定义还是在比较中定义?

可能还有其他更复杂的情况,例如

public class B<T> {
    public delegate bool Compare<X>(X a, T b);
}

在这种情况下,我想知道:X在Compare上定义,T在B上定义。

1 个答案:

答案 0 :(得分:2)

检查声明类型:

void Test(Type type)
{
    if (type.DeclaringType.IsGenericType)
        Console.WriteLine("1"); 
    else 
        Console.WriteLine("2");
}