// 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上定义。
答案 0 :(得分:2)
检查声明类型:
void Test(Type type)
{
if (type.DeclaringType.IsGenericType)
Console.WriteLine("1");
else
Console.WriteLine("2");
}