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

在C#中能否返回支持params风格可变参数的函数?

在C#中返回支持可变数量参数的函数

答案是可以实现。标准的Func<string[], string>委托不支持直接传入多个参数,但我们可以自定义一个带params修饰符的委托类型,让返回的函数支持可变参数调用。

实现步骤

  1. 自定义带params的委托类型
  2. 调整创建函数的返回类型为该委托
  3. 修正原代码中的语法错误(原代码中Select后的ToArray()位置错误)

完整实现代码

// 自定义带params的委托类型
private delegate string CombineDelegate(params string[] theRest);

private CombineDelegate CreateCombineFunction(string baseUrl, char delim)
{
    return theRest =>
        baseUrl.TrimEnd(delim) + delim +
        string.Join(delim.ToString(), theRest.Select(r => r!.Trim(delim)).ToArray());
}

调用示例

var combineFunction = CreateCombineFunction("http://blabla/", '/');
// 传入数组的方式依然有效
var combinedStr1 = combineFunction(new[] { "this", "works" });
// 直接传入多个参数也可以正常工作了
var combinedStr2 = combineFunction("this", "does", "now", "work");

补充说明

  • 自定义委托时,在参数前添加params关键字,就能让委托实例支持可变数量的参数传入,效果和直接定义带params的函数一致。
  • 如果不想自定义委托,也可以利用C#的隐式数组转换,但这种方式需要调用时手动加new[],不如自定义委托直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:49:56