c#反射——泛型类中的委托

本文关键字:泛型类 反射 | 更新日期: 2023-09-27 18:18:01

// 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是在比较上定义的,T是在b上定义的。

c#反射——泛型类中的委托

检查声明类型:
void Test(Type type)
{
    if (type.DeclaringType.IsGenericType)
        Console.WriteLine("1"); 
    else 
        Console.WriteLine("2");
}