2016-11-16 74 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"); 
}