[英]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.