2012-11-03 52 views
4

泛型類型參數請看下面的泛型類如何體現在C#.NET

Dictionary<TKey, TValue> 

List<T> 

CustomHashMap<K, V> 

是否可以反射回給泛型類型參數的名字呢?

對於實施例

"TKey", "TValue" 

"T" 

"K", "V" 

回答

4

這似乎達到目的:

class Program 
{ 
    static IEnumerable<string> GetGenericArgumentNames(Type type) 
    { 
     if (!type.IsGenericTypeDefinition) 
     { 
      type = type.GetGenericTypeDefinition(); 
     } 

     foreach (var typeArg in type.GetGenericArguments()) 
     { 
      yield return typeArg.Name; 
     } 
    } 

    static void Main(string[] args) 
    { 
     // For a raw type 
     Trace.WriteLine(string.Join(" ", GetGenericArgumentNames(typeof(Foo<>)))); 
     Trace.WriteLine(string.Join(" ", GetGenericArgumentNames(typeof(Foo<Quux>)))); 
    } 

} 

class Foo<TBar> {} 

class Quux {} 
+0

投票++; // 奇蹟般有效! :-) – series0ne

+1

@activwerx更改了代碼以提供一個很好的實用程序函數,該函數將用於泛型類型定義和實例化。 – millimoose