C#中如何创建支持任意数量泛型参数的类?
解决方案
方案1:使用params数组替代泛型类
把参数处理逻辑从类的泛型声明转移到方法(构造函数或执行方法)中,利用C#的params关键字接收任意数量参数,无需定义多版本泛型类。
修改后代码示例:
public class Base { protected object[] CommandParams; // 支持任意数量参数的构造函数 public Base(params object[] parameters) { CommandParams = parameters; // 在这里处理参数逻辑 } } public class CustomCommand : Base { // 兼容原有无参逻辑 public CustomCommand() : base() { } // 带任意参数的构造函数 public CustomCommand(params object[] parameters) : base(parameters) { } public void Execute() { // 执行逻辑中使用参数 foreach (var param in CommandParams) { // 处理每个参数 } } }
如果需要强类型检查,可指定统一参数类型:
public class Base<T> { protected T[] CommandParams; public Base(params T[] parameters) { CommandParams = parameters; } } public class CustomCommand<T> : Base<T> { public CustomCommand(params T[] parameters) : base(parameters) { } public void Execute() { // 强类型处理参数 } }
方案2:使用集合传递参数
若需保留多样参数的类型信息,可通过构造函数传入IEnumerable<object>或自定义参数集合:
public class Base { protected IEnumerable<object> CommandParams; public Base(IEnumerable<object> parameters) { CommandParams = parameters; } } public class CustomCommand : Base { public CustomCommand(IEnumerable<object> parameters) : base(parameters) { } // 结合params提供便捷构造 public CustomCommand(params object[] parameters) : base(parameters) { } }
方案3:利用动态类型(Dynamic)
如果不需要编译时严格类型检查,可使用dynamic处理不确定类型的参数:
public class Base { protected dynamic[] CommandParams; public Base(params dynamic[] parameters) { CommandParams = parameters; } } public class CustomCommand : Base { public CustomCommand(params dynamic[] parameters) : base(parameters) { } public void Execute() { foreach (var param in CommandParams) { // 根据参数实际类型处理逻辑 } } }
关于你之前的写法
C#不支持customCommand<new T[]>这类泛型数组的声明语法,泛型参数只能是类型参数,无法直接定义支持任意数量泛型参数的类,这也是手动定义多版本泛型类会繁琐的核心原因。
内容的提问来源于stack exchange,提问作者Zacc
相关产品推荐
相关产品推荐

