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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 04:12:58