2014-09-28 36 views
1

我在寫一個通用的保存對象圖方法。如何找出零長度集合的元素是什麼類型?

如果我的對象圖包含一個集合,那麼該集合的所有元素都可能已被刪除。

爲了堅持刪除,我需要知道什麼類型的實體集合是爲了容納。

navProps = GetNavigationProperties(originalEntity); 
foreach (PropertyInfo navProp in navProps) 
{ 

    Type propertyType = navProp.PropertyType; 

    bool isCollection = propertyType.GetInterfaces().Any(x => x == typeof(IEnumerable)) && 
              !(propertyType == typeof(string)); 

    object obj = navProp.GetValue(item); 

    if (isCollection) 
    { 
     // I need to know what type the elements in the collection so I can retrieve the ones that might need deleting. 
    } 

} 
+0

告訴我們最初的定義可能是什麼樣子,例如IList 等 – code4life 2014-09-28 16:59:54

回答

1

你有兩種情況:要麼這只是IEnumerable,那麼你只能知道元素object型。這是你的代碼目前所做的。

第二種可能性是,你有一個強類型IEnumerable<T>,在這種情況下,你可以這樣做:

var enumerableTInterface = propertyType 
    .GetInterfaces() 
    .FirstOrDefault(x => x.IsGenericType && x.GetGenericTypeDefinition() 
              == typeof(IEnumerable<>)); 

bool isStronglyTypedCollection = enumerableTInterface != null; 

if (isStronglyTypedCollection) 
{ 
    var elementType = enumerableTInterface.GetGenericArguments()[0]; 
    //... 
相關問題