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

C#如何在for循环中动态合并多个Func<T,TResult>为单个委托

解决方案

1. 通用Func合并工具方法

先实现两个通用合并方法,支持任意数量的Func<string, bool>按||(或)、&&(与)逻辑合并,自带短路执行特性,完全覆盖你的业务扩展需求:

// 合并多个Func为"或"逻辑:任意一个委托返回true则整体返回true,后续不再执行
public static Func<string, bool> CombineOr(params Func<string, bool>[] predicates)
{
    return str =>
    {
        foreach (var predicate in predicates)
        {
            if (predicate(str)) return true;
        }
        return false;
    };
}

// 合并多个Func为"与"逻辑:所有委托返回true则整体返回true,任意一个返回false则终止执行
public static Func<string, bool> CombineAnd(params Func<string, bool>[] predicates)
{
    return str =>
    {
        foreach (var predicate in predicates)
        {
            if (!predicate(str)) return false;
        }
        return true;
    };
}

2. 修正GetData方法实现

你原示例代码存在三处需要调整的问题:

  • lambda语法错误:不能在||两侧重复写str =>声明参数
  • for循环初始化错误:int i = i属于无效赋值,应该从i=1开始遍历(第一个元素已单独初始化)
  • 闭包捕获循环变量陷阱:循环中直接使用i会导致所有lambda最终捕获到循环结束后的i值,需要在循环内部单独定义变量存储当前遍历值

修正后代码如下:

public static Func<string, bool> GetData(string request)
{
    var data = request.Split(',');
    if (data.Length == 0) return _ => false; // 空输入容错处理

    var predicates = new List<Func<string, bool>>();
    // 初始化第一个校验规则,可替换为实际的多行逻辑Func
    Func<string, bool> firstRule = str => str.ToUpper() == data[0] || str.ToLower() == data[0];
    predicates.Add(firstRule);

    // 循环添加剩余校验规则
    for (int i = 1; i < data.Length; i++)
    {
        // 循环内单独定义变量,规避闭包捕获问题
        var currentItem = data[i];
        Func<string, bool> rule = str => str.ToUpper() == currentItem || str.ToLower() == currentItem;
        // 此处可替换为任意多行逻辑的Func实现
        predicates.Add(rule);
    }

    // 按或逻辑合并所有规则后返回
    return CombineOr(predicates.ToArray());
}

3. 多委托&&合并用法

后续如果有多个返回Func<string, bool>的方法需要按与逻辑合并,直接调用CombineAnd即可:

// 示例:三个不同校验方法返回的Func按&&逻辑合并
var func1 = GetData("校验参数1");
var func2 = GetCustomCheckFunc();
var func3 = GetBusinessCheckFunc();
// 合并后委托:只有三个校验全部通过才返回true
var combinedFunc = CombineAnd(func1, func2, func3);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:54:00