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是List,而不是IList,当我将此值传递给外部函数时,我看到一个异常

显然,这是一个外部功能的缺陷

我唯一的想法是将propertyValue强制转换为IList。但在编译时我不知道

所以,我需要动态转换。我有一个通用的列表接口类型,比如variable

var 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);
}