C# 如何将对象转换为对象的 ICollection

C# How to cast object to ICollection of objects

我有一个变量,它是我使用此语法从反射中获得的(property 是一个字符串):

            T entity = DbContext.Set<T>()
               .Include(property)
               .FirstOrDefault(x => x.Id == key);
            var navPropertyCollection = Properties
               .FirstOrDefault(p => p.Name == property)
              ?.GetValue(entity);

navPropertyCollection 是一个对象,但在 class 中它被声明为 ICollection<MyClass> 并初始化为 List<MyClass>。这是有效的:

            var navPropertyCollection = Properties
               .FirstOrDefault(p => p.Name == property)
              ?.GetValue(entity) as List<MyClass>;

但我不知道 MyClass(根本不需要这个方法)!我只知道它是 MyBaseClass 的子类。 我需要将其转换为 ICollection<dynamic>ICollection<object>ICollection<MyBaseClass>List<dynamic>List<object>List<MyBaseClass>。但是这些演员表不起作用。 转换为 IEnumerable<object>IEnumerable<MyBaseClass> 可行,但这不是选项,因为稍后我需要调用方法 Add(),并且更改未在我的 DbContext.[=26 中标记=]

如果您确定 属性 的值将是 List<T> 或其他实现非通用 IList 接口的通用集合,我建议铸造那个。 (不过,我会强制转换而不是使用 as,以避免掩盖意外类型。)

所以:

var navPropertyCollection = (IList) Properties
    .FirstOrDefault(p => p.Name == property)
    ?.GetValue(entity);