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

C#11下使用Activator.CreateInstance传递可变参数的问题

在C# 11(.NET 7)中实现类似Spread语法的参数传递给Activator.CreateInstance

针对你需要用Activator.CreateInstance创建Monocle.Entity子类实例、替代C#12 Spread语法的需求,C#11里有两种直接可行的方式:

1. 直接使用Activator.CreateInstance(Type, object[])重载

这个重载本身就支持接收参数数组,并自动将数组元素“展开”作为构造函数的参数传入,完全不需要额外语法。只要你的参数数组元素的数量、类型顺序和目标子类的构造函数完全匹配即可。

示例代码:

// 假设你的Entity子类是CustomEntity,构造函数为CustomEntity(int id, string name)
Type targetType = typeof(CustomEntity);
object[] constructorParams = new object[] { 1001, "MyCustomEntity" };
Monocle.Entity instance = (Monocle.Entity)Activator.CreateInstance(targetType, constructorParams);

你之前遇到的MissingMethodException本质是参数数组的元素和目标构造函数不匹配(数量不足、类型不对),和参数传递方式无关,这点需要注意。

2. 混合固定参数与动态参数数组时,拼接数组

如果需要部分参数是固定值,部分来自动态数组,C#11没有原生Spread语法,但可以通过数组拼接来实现:

示例代码:

// 构造函数为CustomEntity(int fixedId, string name, bool isActive)
int fixedId = 2001;
object[] dynamicParams = new object[] { "DynamicEntity", true };
// 拼接固定参数和动态参数数组
object[] allParams = new object[] { fixedId }.Concat(dynamicParams).ToArray();
var instance = (Monocle.Entity)Activator.CreateInstance(targetType, allParams);

内容的提问来源于stack exchange,提问作者The Mayday Man

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:12:44