2016-12-23 54 views
2

我想用它們聲明的參數名稱來生成泛型類的名稱。例如,如果我有泛型類和實例化的如下所示我想打印"MyClass<P1,M>"在C中訪問泛型類型的GenericTypeParameters#

​​

現在,我讓我的類型信息myInstance,然後泛型類型定義是這樣的:

// MyClass<int,string> type info here 
var type = myInstance.GetType(); 
// MyClass<P1, M1> type info here 
var genericType = type.GetGenericTypeDefinition(); 

調試器顯示了所有參數名genericType財產GenericTypeParameters並輸入信息。然而,我無法從我的C#代碼訪問該集合,並將genericType轉換爲System.RuntimeType類,因爲RuntimeType是內部的,所以無法工作。

那麼有沒有辦法訪問GenericTypeParameters屬性莫名其妙或我在這裏SOL? 環境VS2015,.NET 4.6.1

回答

4

我認爲你只是在尋找Type.GetGenericArguments,你應該呼籲genericType而非type - 在這一點上,鍵入「論據」是真正的類型參數因爲這是一個開放式的。

樣品(使用Dictionary<,>爲簡單起見):

using System; 
using System.Collections.Generic; 

class Test 
{ 
    static void Main() 
    { 
     var dictionary = new Dictionary<string, int>(); 
     var type = dictionary.GetType(); 
     var genericType = type.GetGenericTypeDefinition(); 
     foreach (var typeArgument in genericType.GetGenericArguments()) 
     { 
      // TKey, then TValue 
      Console.WriteLine(typeArgument); 
     } 
    } 
} 
與信息,您可以制定出字符串格式化等自己

希望。

+0

@MichaelLiu:啊,是的 - 哎呀,誤讀。將刪除,編輯然後取消刪除。 –

+0

太棒了!幾乎GetGenericArguments()返回GenericTypeParameters屬性,我可以在調試器中看到。現在混亂消失了。 –