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

通过反射创建的类实例无法添加到泛型List容器的问题求助

问题原因
  • 变量引用错误:你创建的实例存储在变量x中,但调用container.Add时传入了尚未声明的变量y,先修正为传入x。
  • 动态绑定类型不匹配:Activator.CreateInstance返回值的编译期类型为object,dynamic执行方法重载匹配时会优先使用参数的编译期类型,而非运行时实际类型,因此无法匹配List<MyType>.Add(MyType)的参数要求,抛出异常。
  • 索引器调用错误:C#中List<T>的索引器直接使用[索引]语法访问,无需显式写.Item属性,.Item是索引器的内部实现名称,不符合C#语法规范。
可行解决方案

方案1:保留dynamic用法,调整参数类型

将创建的实例也声明为dynamic,让运行时可以识别到实例的实际类型,正确匹配Add方法重载:

// 前面创建applicationModelType、container的代码不变
dynamic x = Activator.CreateInstance(applicationModelType);
container.Add(x);
dynamic y = container[0];

方案2:完全基于反射实现(无动态绑定开销,兼容性更高)

如果不想依赖dynamic的运行时绑定,可直接通过反射调用Add方法和索引器,运行更稳定:

// 前面创建applicationModelType、applicationModelContainerType、container的代码不变
object x = Activator.CreateInstance(applicationModelType);
// 反射调用Add方法
MethodInfo addMethod = applicationModelContainerType.GetMethod("Add", new[] { applicationModelType });
addMethod.Invoke(container, new[] { x });
// 反射获取第一个元素
object y = applicationModelContainerType.GetProperty("Item").GetValue(container, new object[] { 0 });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:12:04