尝试将数据插入命名类型 [duplicate] 的数组时出现 NullReferenceException

NullReferenceException when trying to insert data Into array of named type [duplicate]

提问人:Toxic 提问时间:3/4/2022 最后编辑:Mark RotteveelToxic 更新时间:3/4/2022 访问量:39

问:

我正在尝试从 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);
}
C# 数组 NullReferenceException WebAPI

评论

1赞 Mark Rotteveel 3/4/2022
您可能已经创建了一个数组,但其所有元素都是 null。您需要创建一个 的实例,填充该实例,然后将其添加到数组中。RouteLine

答:

1赞 Magnus 3/4/2022 #1

你所拥有的是一个充满值的数组。您必须创建一个类型的对象,设置值,然后将其放入数组中。nullRouteLine

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;
}