2009-09-20 57 views
1

我創建了<T>的列表,但我想知道該T對象的類型。 (我使用反射在我的項目,所以我不知道是什麼類型,當我創造我的代碼類型的系統。收集<T>

所以首先我有我的List - >List<T>

現在我想該T-對象的所有屬性(用於在數據網格列)

任何幫助嗎?

回答

0

您可以從該列表中取一個對象,看看它的類型。雖然肯定是有一個更好的辦法,我想想。

+1

如果不是所有相同類型的集合呢? – 2009-09-20 18:49:25

+0

@Ahmed - 那麼它不是一個明智的名單;實際上,查看列表中的第一項是「IList」不是「ITypedList」時使用的官方回退方法,並且沒有非對象索引器。所以這不是一個壞的建議。但是如果從列表本身可以識別出'T' *,那麼它是可取的。 – 2009-09-20 19:34:33

+0

這個問題清楚地表明它是一個列表,沒有理由爲什麼列表中的項目將是不同的類型 – 2009-09-20 20:22:12

11

你可以只使用typeof運算(T)在你的類或泛型方法:

void ProcessList<T>(List<T> list) { 
    Type typeOfT = typeof(T); 
    // Work with type... 
} 
+0

如果OP使用反射(問題),那麼在事先不知道「T」的情況下調用此方法的方法並不是很好,至少,直到C#4.0(您可以將其用作動態方法,並讓運行時間擔心它)。 – 2009-09-20 20:39:42

1

對於GetListType函數見this answer。要獲得屬性列表的數據綁定的目的,你應該使用組件模型(兼容性) - 即

PropertyDescriptorCollection props = TypeDescriptor.GetProperties(type); 

然後看看每個PropertyDescriptor,使用GetValue/Converter等。您的清單代碼通常必須針對非通用IList;是這樣的:

IList list = ... 
object obj = list[rowIndex]; 
// then for any given "prop" 
object val = prop.GetValue(obj); 
string displayText = prop.Converter.ConvertToString(val); 

不過,如果你想成爲「完整」,你想也需要看看IListSourceITypedList

0
values.GetType().GetGenericArguments()[0].FullName 

上面給你的類型對象類型「T」

values.GetType().GetGenericArguments()[0].GetProperties(System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Instance) 

上面給出了'T'上的公共屬性,您可以根據需要傳遞適當的BindingFlags。