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);
我有一个变量,它是我使用此语法从反射中获得的(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);