C# 动态转换为通用接口
我有一个具有以下语法的外部函数:C# 动态转换为通用接口,c#,reflection,C#,Reflection,我有一个具有以下语法的外部函数: public void Set<FieldType>( Field field, FieldType value ) 因此,propertyValue是List,而不是IList,当我将此值传递给外部函数时,我看到一个异常 显然,这是一个外部功能的缺陷 我唯一的想法是将propertyValue强制转换为IList。但在编译时我不知道 所以,我需要动态转换。我有一个通用的列表接口类型,比如variable var genericIList
public void Set<FieldType>(
Field field,
FieldType value
)
因此,propertyValue是Listvar genericIListType = typeof (IList<>)
.MakeGenericType(field.ValueType);
但我找不到如何将propertyValue强制转换为这种类型的方法。我只能找到如何将对象转换为其他对象的示例,例如使用Activator.CreateInstance,但我需要转换为接口
请告诉我如何实现该目标。您可以将外部功能包装为:
public void SetWrapper<T>(Field field, List<T> list) {
entity.Set(field, (IList<T>)list);
}
您可以包装外部函数:
public void SetWrapper<T>(Field field, List<T> list) {
entity.Set(field, (IList<T>)list);
}
谢谢,大卫。解决方案甚至比您建议的更简单:publicstaticvoidsetwrapper这个实体,字段字段,IList值{Entity.Setfield,value;}谢谢,David。解决方案甚至比您建议的更简单:publicstaticvoidsetwrapperthiseentity实体,Field字段,IList值{Entity.Setfield,value;}
public void SetWrapper<T>(Field field, List<T> list) {
entity.Set(field, (IList<T>)list);
}