C#如何返回已完成数据填充的ArasOrder类型对象
核心问题
你当前定义的aras()方法使用了void作为返回值类型,该类型标识方法执行后不返回任何输出;同时ArasOrder对象的实例化位置在foreach循环外部,多轮循环时会反复覆盖对象字段,最终仅保留最后一条遍历数据的赋值结果。
具体修改步骤
- 调整方法返回值类型:如果仅需要返回单个填充完成的
ArasOrder对象,将方法签名的void替换为ArasTEST.Order;如果需要返回遍历参数生成的所有订单对象,将返回值替换为List<ArasTEST.Order> - 修正对象实例化位置:将
ArasOrder的实例化代码移到foreach循环内部,避免多轮循环覆盖之前的赋值结果 - 在所有业务逻辑执行完成后,使用
return关键字返回填充完成的目标对象
代码示例
场景1:返回单条ArasOrder(仅保留最后一轮循环的赋值结果)
public class ArasDeneme { // 将void修改为对应的返回类型ArasTEST.Order public static ArasTEST.Order aras() { var ArasService = new ArasTEST.Service(); var ArasGonderi = new ArasTEST.ShippingOrder(); var parametreler = ArasKargoTEST.ParametreGet(); string newentegrationcode = ""; // 提前声明对象引用,用于存储最后一轮的赋值结果 ArasTEST.Order ArasOrder = null; foreach (var item in parametreler) { var encode = entegrationcode(); var YeniGelenDesi = DesiHesabi(item.WebSiparisNo); newentegrationcode = "123" + encode; // 每轮循环新建实例,避免值被覆盖 ArasOrder = new ArasTEST.Order(); ArasOrder.UserName = ""; ArasOrder.Password = ""; ArasOrder.ReceiverName = item.KargoAdSoyad; ArasOrder.ReceiverPhone1 = item.KargoTelefon; ArasOrder.ReceiverCityName = item.KargoIlAdi; ArasOrder.ReceiverTownName = item.KargoIlceAdi; ArasOrder.ReceiverAddress = item.KargoAdres; ArasOrder.TradingWaybillNumber = item.WebSiparisNo; ArasOrder.PieceCount = "1"; ArasOrder.IntegrationCode = newentegrationcode; ArasOrder.PayorTypeCode = "1"; ArasOrder.IsWorldWide = "0"; ArasOrder.IsCod = "0"; ArasOrder.VolumetricWeight = YeniGelenDesi; ArasOrder.SenderAccountAddressId = "1071"; ArasTEST.PieceDetail[] ArasPieceDetails = new ArasTEST.PieceDetail[1]; ArasTEST.PieceDetail ArasPieceDetail1 = new ArasTEST.PieceDetail(); ArasPieceDetail1.BarcodeNumber = newentegrationcode; ArasPieceDetail1.VolumetricWeight = YeniGelenDesi; ArasPieceDetail1.Weight = "1"; ArasPieceDetail1.Description = ""; ArasPieceDetails[0] = ArasPieceDetail1; ArasOrder.PieceDetails = ArasPieceDetails; var ArasOrderInfo = new ArasTEST.Order[1]; ArasOrderInfo[0] = ArasOrder; // 注意:原代码此处SetOrder传入的是空参数,实际需要传入组装好的订单信息才能正常调用接口 var takipNoResult = ArasService.SetOrder("", "", ""); var ArasOrderResultInfo = takipNoResult[0]; var SonucKodu = takipNoResult[0].ResultCode; var SonucMesaji = takipNoResult[0].ResultMessage; var SonucInvoiceKey = takipNoResult[0].InvoiceKey; } // 循环结束后返回填充完成的对象 return ArasOrder; } }
场景2:返回所有循环生成的ArasOrder集合(推荐,适配批量遍历参数的业务逻辑)
public class ArasDeneme { // 返回值改为List<ArasTEST.Order>存储多条订单 public static List<ArasTEST.Order> aras() { var ArasService = new ArasTEST.Service(); var ArasGonderi = new ArasTEST.ShippingOrder(); var parametreler = ArasKargoTEST.ParametreGet(); string newentegrationcode = ""; // 初始化集合存储所有生成的订单 List<ArasTEST.Order> orderList = new List<ArasTEST.Order>(); foreach (var item in parametreler) { var encode = entegrationcode(); var YeniGelenDesi = DesiHesabi(item.WebSiparisNo); newentegrationcode = "123" + encode; // 每轮循环新建订单实例 ArasTEST.Order ArasOrder = new ArasTEST.Order(); ArasOrder.UserName = ""; ArasOrder.Password = ""; ArasOrder.ReceiverName = item.KargoAdSoyad; ArasOrder.ReceiverPhone1 = item.KargoTelefon; ArasOrder.ReceiverCityName = item.KargoIlAdi; ArasOrder.ReceiverTownName = item.KargoIlceAdi; ArasOrder.ReceiverAddress = item.KargoAdres; ArasOrder.TradingWaybillNumber = item.WebSiparisNo; ArasOrder.PieceCount = "1"; ArasOrder.IntegrationCode = newentegrationcode; ArasOrder.PayorTypeCode = "1"; ArasOrder.IsWorldWide = "0"; ArasOrder.IsCod = "0"; ArasOrder.VolumetricWeight = YeniGelenDesi; ArasOrder.SenderAccountAddressId = "1071"; ArasTEST.PieceDetail[] ArasPieceDetails = new ArasTEST.PieceDetail[1]; ArasTEST.PieceDetail ArasPieceDetail1 = new ArasTEST.PieceDetail(); ArasPieceDetail1.BarcodeNumber = newentegrationcode; ArasPieceDetail1.VolumetricWeight = YeniGelenDesi; ArasPieceDetail1.Weight = "1"; ArasPieceDetail1.Description = ""; ArasPieceDetails[0] = ArasPieceDetail1; ArasOrder.PieceDetails = ArasPieceDetails; var ArasOrderInfo = new ArasTEST.Order[1]; ArasOrderInfo[0] = ArasOrder; var takipNoResult = ArasService.SetOrder("", "", ""); var ArasOrderResultInfo = takipNoResult[0]; var SonucKodu = takipNoResult[0].ResultCode; var SonucMesaji = takipNoResult[0].ResultMessage; var SonucInvoiceKey = takipNoResult[0].InvoiceKey; // 填充完成的订单加入集合 orderList.Add(ArasOrder); } // 循环结束返回所有订单集合 return orderList; } }
注意:如果方法不是静态类型,返回对象的逻辑完全一致,仅需要调整对应方法签名的返回值类型即可。调用方法时直接用对应类型的变量接收返回结果,就可以拿到填充完成的ArasOrder对象。
内容的提问来源于stack exchange,提问作者codergirl3434
相关产品推荐
相关产品推荐

