You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#通过反射创建泛型List调用Add方法触发类型转换错误如何解决

问题原因

代码在构造泛型列表类型时传错了泛型参数:

  • 你定义的type变量值是typeof(List<myObject>),再传入typeof(List<>).MakeGenericType(type),最终生成的是嵌套的List<List<myObject>>类型,不是你期望的List<myObject>
  • 因此这个列表的Add方法要求接收的参数是List<myObject>类型,你传入myObject实例自然会报类型不匹配的错误

解决方法

只需要把传入MakeGenericType的参数换成列表元素myObject的类型即可,修正后完整代码如下:

public class myObject
{
    public object FieldValue { get; set; }
    public int ID_OpenField { get; set; }
}

private void Form1_Load(object sender, EventArgs e)
{
    // 这里取列表元素的类型,不是List容器本身的类型
    Type elementType = typeof(myObject);

    // 构造List<myObject>的泛型类型
    var genericType = typeof(List<>).MakeGenericType(elementType);
    var list = Activator.CreateInstance(genericType);

    myObject obj = new myObject() { FieldValue = "TextObjectValue", ID_OpenField = 1 };
    object[] o = new object[] { obj };

    list.GetType().GetMethod("Add").Invoke(list, o);            
}

如果需要动态生成任意T类型的列表,只需要把上述代码中的elementType替换为对应T的Type实例即可。

内容的提问来源于stack exchange,提问作者bama71

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:42:02