2016-11-16 71 views
1
// 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 
} 

我的问题:C#反思 - 代表泛型类

如何在位置#1编写代码来告诉类型是情形1或情形2?

似乎有

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

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

由于没有什么区别!

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

我想是要我说出类型的T-来从。 T是在A中定义还是在Compare中定义?

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

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

在这种情况下,我想知道:X是比较确定,而T是在B.

+0

你就不能做到'型== typeof运算(A <>比较。)'?如果它是错误的,那就是另一个(取决于它需要具体的具体情况)。 –

+0

谢谢@LukeBriggs不,它需要100%具体。其实我需要知道T从哪里来。 – qiucw

+1

100%具体是什么意思?你的意思是你想知道类型参数'T'是在类还是方法上定义的?如果是这样的话,如果你现在更新你的问题来清楚地说明问题,这听起来不像是你要求的那样。 – Adrian

回答

2

检查声明类型定义:

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