2009-02-11 55 views
11

通過反思,有沒有什麼方法可以讓我查看通用List的包含類型,以查看該集合的類型?例如:通過反思獲取包含在列表<T>中的類型?

我有一組簡單的業務對象,從一個接口派生,就像這樣:

public interface IEntityBase{} 

public class BusinessEntity : IEntityBase 
{ 
    public IList<string> SomeStrings {get; set;}  
    public IList<ChildBusinessEntity> ChildEntities { get; set;} 
} 

public class ChildBusinessEntity : IEntityBase{} 

在我經過的BusinessEntity的通過反射特性迭代的情況下,會有一個我的方式來看看是否嵌套在從IEntityBase派生的列表內的對象?

編碼(嚴重)是這樣的:

foreach(PropertyInfo info in typeof(BusinessEntity).GetProperties()) 
{ 
    if(info.PropertyType is GenericIList && 
    TheNestedTypeInThisList.IsAssignableFrom(IEntityBase) 
    { 
    return true; 
    } 
} 

唯一的選擇,我至今聽到的,這樣的作品,將是從該列表中拉出來的第一個項目,然後看它的類型。任何更簡單的方法(特別是因爲我不能保證List不會是空的)?

+0

杜佩:http://stackoverflow.com/questions/528546/type-getinterface-and-nested-types – 2009-02-11 18:34:21

回答

27

假設您有描述您的List<>System.Type,您可以使用Type.GetGenericArguments()方法獲取描述它的列表的Type實例。

2

這樣的事情?

foreach (System.Reflection.PropertyInfo info 
             in typeof(BusinessEntity).GetProperties()) 
{ 
    if (info.PropertyType.IsGenericType && 
     info.PropertyType.Name.StartsWith("IList") && 
     info.PropertyType.GetGenericArguments().Length > 0 && 
     info.PropertyType.GetGenericArguments()[0] == typeof(string) 
     ) 
    { 
     return true; 
    } 
} 
相關問題