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

如何用动态UI数据填充Web服务所需的PaymentApproval类及子类数组

动态填充PaymentApproval的PaymentProposalDetail数组

你说得对,因为数组的长度是固定的,在循环前没法提前知道用户输入有多少条数据,直接用数组确实不太方便。更灵活的方式是先使用List<PaymentProposalDetail>来动态收集每一条明细,最后再把列表转换成数组赋值给pa.Details。

修改后的代码如下:

// 先初始化PaymentApproval并填充常规字段
PaymentApproval pa = new PaymentApproval() {
    VendorId = "从UI获取的VendorId",
    Company = "从UI获取的Company",
    // 其他常规字段同理,替换成用户输入的动态数据
    SubmissioNDate = DateTime.Today,
    ValueDate = DateTime.Today.AddMonths(1),
    TotalAmount = 0, // 可选:后续可根据明细的PayAmount累加计算
    PaymentInstructionId = "从UI获取的ID",
    Currency = "从UI获取的Currency",
    Comment = ""
};

// 创建一个List来临时存储明细
List<PaymentProposalDetail> detailsList = new List<PaymentProposalDetail>();

foreach (var UIdata in UIdataStruct) {
    PaymentProposalDetail pd = new PaymentProposalDetail();
    pd.InvoiceNumber = UIdata.invoiceNumber;
    pd.PayAmount = UIdata.payAmount;
    pd.InvoiceCurrency = UIdata.invoiceCurrency;
    
    // 将创建好的明细对象添加到List中
    detailsList.Add(pd);
    
    // 可选:如果TotalAmount需要根据明细累加,在这里计算
    pa.TotalAmount += UIdata.payAmount;
}

// 最后把List转换成数组赋值给pa.Details
pa.Details = detailsList.ToArray();

为什么这么做?

  • List<T>是动态集合,可以随时添加元素,不需要提前知道元素数量,非常适合处理用户输入的动态数据
  • 循环结束后调用ToArray()就能把集合转换成PaymentProposalDetail[]类型,完美匹配pa.Details的字段类型

另外补充一个简化写法:如果你的UIdataStruct本身是可枚举集合(比如List),可以用LINQ直接生成数组,省去手动创建List的步骤:

pa.Details = UIdataStruct.Select(data => new PaymentProposalDetail {
    InvoiceNumber = data.invoiceNumber,
    PayAmount = data.payAmount,
    InvoiceCurrency = data.invoiceCurrency
}).ToArray();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:51:21