簡體   English   中英

C#反射通用屬性類型

[英]C# reflection generic property type

假設我有這樣的課程:

public class TestClass <T>
{
    public T Prop { get; set; }
}

我試圖確定屬性類型為T ,而不是傳遞的實際類型,例如int以便對其進行更多說明:

TestClass<int> tc=new TestClass<int>();
tc.GetType().GetProperty("prop").PropertyType.Name; //this returns int, but I need "T"

創建TestClass<int>實例時,您有一個通用的泛型類型-該屬性 int ,而不是T

要獲得實際的泛型類型,可以使用GetGenericTypeDefinition

var genericType = tc.GetType().GetGenericTypeDefinition();
var typeName = genericType.GetProperty("Prop").PropertyType.Name;

而且,如果要區分實際類型和泛型類型參數,可以使用Type.IsGenericParameter

genericType.GetProperty("Prop").PropertyType.IsGenericParameter // true

請注意,如果您使用的是C#6,並且在定義類中要求使用泛型類型參數的名稱,則可以完全不用反射來逃脫:

var name = nameof(T);  // "T"

如果在類的外部需要泛型類型參數的名稱,則需要使用反射(請參見Luaan的答案)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM