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

如何通过循环向对象添加多个同类型成员?

在链式调用中批量添加成员的可行方案

你尝试的直接在链式调用中间插入foreach的写法在C#语法上是不允许的,因为链式调用依赖连续的表达式返回对象,而foreach是语句而非表达式。以下是几种可行的实现方式:

1. 拆分链式调用,先循环再收尾

先将链式前半段的实例保存到变量,循环中持续调用WithLine更新实例,最后完成链式调用:

// 初始化基础实例
var transactionBuilder = new Transaction(arg1, arg2)
    .WithHeader("Header Thing 1", "Header Thing 2");

// 循环添加所有Line
foreach (var line in Lines)
{
    transactionBuilder = transactionBuilder.WithLine(line.LineNum, line.LineDetail);
}

// 完成创建
var transaction = transactionBuilder.Create();

2. 封装批量添加的扩展方法

如果可以自定义扩展,新增一个批量添加Line的方法,把循环逻辑封装起来,保持链式风格:

// 定义扩展方法
public static class TransactionExtensions
{
    public static Transaction WithLines(this Transaction transaction, IEnumerable<Line> lines)
    {
        foreach (var line in lines)
        {
            transaction.WithLine(line.LineNum, line.LineDetail);
        }
        return transaction;
    }
}

// 链式调用批量方法
var transaction = new Transaction(arg1, arg2)
    .WithHeader("Header Thing 1", "Header Thing 2")
    .WithLines(Lines) // 直接批量添加
    .Create();

3. 使用LINQ的Aggregate方法(函数式风格)

借助LINQ的Aggregate方法,在一行代码内完成遍历和累加调用:

var transaction = Lines.Aggregate(
    // 初始实例
    new Transaction(arg1, arg2).WithHeader("Header Thing 1", "Header Thing 2"),
    // 遍历每个Line,更新实例
    (builder, line) => builder.WithLine(line.LineNum, line.LineDetail))
    .Create();

关键注意点

以上所有方法的前提是:Transaction的WithLine方法是fluent接口设计(即返回当前Transaction实例)。如果WithLine是void返回类型,需要先调整Transaction的方法设计,让其返回自身;或者改为通过内部集合存储Line,最后统一构建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:25:55