提问人:Toxic 提问时间:3/4/2022 最后编辑:Mark RotteveelToxic 更新时间:3/4/2022 访问量:39
尝试将数据插入命名类型 [duplicate] 的数组时出现 NullReferenceException
NullReferenceException when trying to insert data Into array of named type [duplicate]
问:
我正在尝试从 SOAP API 获取数据,以便我可以转换为 REST API,但在尝试添加命名类型的数组时出现 NullReferenceException。
[HttpGet("{id}")]
public async Task<ActionResult<RouteTable>> GetAllRoutes(string siteId)
{
BTLAPIRouteServiceClient client = new BTLAPIRouteServiceClient();
CallContext context = new CallContext();
BTLAPIRouteServiceGetAllRoutesResponse result = await client.getAllRoutesAsync(context, dateProcess, siteId);
BTLAPIRouteTable routeResult = result.response;
RouteTable routeTable = new RouteTable();
if (routeResult != null)
{
routeTable.deliveryPeriod = routeResult.parmDeliveryPeriod;
routeTable.driverId = routeResult.parmDriverId;
routeTable.processId = routeResult.parmProcessId;
routeTable.routeId = routeResult.parmRouteId;
routeTable.status = routeResult.parmStatus;
routeTable.vanId = routeResult.parmVanId;
RouteLine[] routeLine = new RouteLine[routeResult.parmRouteLines.Count()];
for (int lines = 0; lines < routeResult.parmRouteLines.Count(); lines++)
{
routeLine[lines].city = routeResult.parmRouteLines[lines].parmCity; //Null reference on routeLine[lines].city. routeResult.parmRouteLines[lines].parmCity is not null.
routeLine[lines].custAccount = routeResult.parmRouteLines[lines].parmCustAccount;
routeLine[lines].custName = routeResult.parmRouteLines[lines].parmCustName;
routeLine[lines].invoiceId = routeResult.parmRouteLines[lines].parmInvoiceId;
routeLine[lines].deliveryDate = routeResult.parmRouteLines[lines].parmDeliveryDate;
routeLine[lines].productType = routeResult.parmRouteLines[lines].parmProductType;
routeLine[lines].routeId = routeResult.parmRouteLines[lines].parmRouteId;
routeLine[lines].salesId = routeResult.parmRouteLines[lines].parmSalesId;
routeLine[lines].volume = routeResult.parmRouteLines[lines].parmVolume;
routeLine[lines].weight = routeResult.parmRouteLines[lines].parmWeight;
}
routeTable.routeLines = routeLine;
return routeTable;
}
else { return NotFound(); }
}
我知道您必须在使用数组之前对其进行初始化,但这不就是我在这一行上所做的吗? 值为 1。routeResult.parmRouteLines.Count()
RouteLine[] routeLine = new RouteLine[routeResult.parmRouteLines.Count()];
我还尝试了以下使用 foreach 循环和 Append 的方法,但我遇到了同样的错误。
foreach (var lines in routeResult.parmRouteLines)
{
RouteLine[] routeLine = new RouteLine[1];
routeLine.city = lines.parmCity;
routeLine.custAccount = lines.parmCustAccount;
routeLine.custName = lines.parmCustName;
routeLine.invoiceId = lines.parmInvoiceId;
routeLine.deliveryDate = lines.parmDeliveryDate;
routeLine.productType = lines.parmProductType;
routeLine.routeId = lines.parmRouteId;
routeLine.salesId = lines.parmSalesId;
routeLine.volume = lines.parmVolume;
routeLine.weight = lines.parmWeight;
//routeTable.routeLines[0] = routeLine;
routeTable.routeLines.Append(routeLine);
}
答:
1赞
Magnus
3/4/2022
#1
你所拥有的是一个充满值的数组。您必须创建一个类型的对象,设置值,然后将其放入数组中。null
RouteLine
for (int lines = 0; lines < routeResult.parmRouteLines.Count(); lines++)
{
var r = new RouteLine();
r.city = routeResult.parmRouteLines[lines].parmCity;
r.custAccount = routeResult.parmRouteLines[lines].parmCustAccount;
routeLine[lines] = r;
}
评论
RouteLine