我正在编写一个通用的保存对象图方法。
如果我的对象图包含一个集合,则可能已删除该集合的所有元素。
为了保留删除,我需要知道该集合要包含的实体类型。
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 :(得分: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];
//...