如何用动态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
相关产品推荐
相关产品推荐

