在C#中能否返回支持params风格可变参数的函数?
在C#中返回支持可变数量参数的函数
答案是可以实现。标准的Func<string[], string>委托不支持直接传入多个参数,但我们可以自定义一个带params修饰符的委托类型,让返回的函数支持可变参数调用。
实现步骤
- 自定义带
params的委托类型 - 调整创建函数的返回类型为该委托
- 修正原代码中的语法错误(原代码中
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
相关产品推荐
相关产品推荐

