c# - System.ArgumentNullException:'值不能为空参数名称:源'
问题描述
我有一个程序连接到一个站点并使用soap api获取订单列表。但我有一个非常奇怪的问题。当 ai 尝试获取没有订单的一天的订单,然后尝试获取一天的订单列表时,我收到此错误。但奇怪的是,如果在出现错误的行中放置一个断点并逐步评估程序,我不会收到任何错误。怎么会这样。这是代码。
https://api.n11.com/ws/OrderService.wsdl
using n11.Deneme.Forms.com.n11.api;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace n11.Deneme.Forms
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string strStartDate = "18/01/2020";
string strEndDate = "18/01/2020";
long totalCountValue = 50;
int currentPageValue = 0;
int pageCountValue = 1;
int pageSizeValue = 50;
Authentication auth = new Authentication();
auth.appKey = "b891a6b9-cb97-4a7e-9ffb-f7b1e2a593e8";
auth.appSecret = "pHCjYYadxwTG64Ej";
OrderSearchPeriod orderSearchPeriod = new OrderSearchPeriod();
orderSearchPeriod.startDate = strStartDate;
orderSearchPeriod.endDate = strEndDate;
OrderDataListRequest orderDataListRequest = new OrderDataListRequest();
//orderDataListRequest.status = "1";
orderDataListRequest.period = orderSearchPeriod;
//orderDataListRequest.orderNumber = "209524598478";
PagingData pagingData = new PagingData();
pagingData.currentPage = currentPageValue;
pagingData.pageCount = pageCountValue;
pagingData.pageSize = pageSizeValue;
pagingData.totalCount = totalCountValue;
DetailedOrderListRequest request = new DetailedOrderListRequest();
request.auth = auth;
request.pagingData = pagingData;
request.searchData = orderDataListRequest;
OrderServicePortService port = new OrderServicePortService();
DetailedOrderListResponse response = port.DetailedOrderList(request);
List<DetailedOrderData> orderList = response.orderList.ToList();
foreach (var order in orderList)
{
MessageBox.Show(order.totalAmount.ToString() + " - " + order.orderNumber + " - " + order.citizenshipId + " - " + order.createDate);
long orderIdValue = order.id;
OrderDataRequest orderDataRequest = new OrderDataRequest();
orderDataRequest.id = orderIdValue;
OrderDetailRequest orderdetailrequest = new OrderDetailRequest();
orderdetailrequest.auth = auth;
orderdetailrequest.orderRequest = orderDataRequest;
OrderServicePortService port1 = new OrderServicePortService();
OrderDetailResponse orderDetailResponse = port1.OrderDetail(orderdetailrequest);
OrderDetailData orderDetail = orderDetailResponse.orderDetail;
MessageBox.Show(orderDetail.orderNumber);
List<OrderSearchData> orderItemList = orderDetail.itemList.ToList();
foreach (var item in orderItemList)
{
MessageBox.Show(item.shipmentInfo.campaignNumber);
}
}
}
}
}
解决方案
如果您在线上遇到错误:
List<DetailedOrderData> orderList = response.orderList.ToList(); //I GOT THE ERROR ON THIS LINE
那么要做的就是看看如何response.orderList
获取一个值。特别是,它是否对线程、任务、计时器、外部事件或其他类似的东西做某事——这可能意味着它在从 初始返回后不久DetailedOrderList
被填充,这可以解释为什么它在您调试和单步执行时起作用(给事情增加一个关键的延迟)。
你也可以简单地做:
var tmp = response.orderList;
if (tmp == null) throw new InvalidOperationException(
"hey, response.orderList was null! this is not good!");
List<DetailedOrderData> orderList = tmp.ToList();
return orderList;
这将非常清楚和明确地表明这是正在发生的事情。如果你没有得到这个异常,而是别的,那么:需要更多的调试!
推荐阅读
- vb.net - VB.net Linq 选择不同的
- font-awesome-5 - 在本地托管时,Fontawesome 5 图标损坏
- node.js - Nodejs Skaffold 本地开发到产品流程
- r - 对于桶形失真图像,如何执行图像扭曲或从一个坐标系到另一个坐标系的转换?
- javascript - 如何使用数据表上传 csv 文件并将其存储到我的服务器中的文件夹中?
- javascript - iPad 不使用 javascript 更新页面(使用 Django 后端)
- python-3.x - 如何按时间顺序单击页面上的多个“+”按钮并使用python从中提取数据?
- flutter - 如何使用 Flutter navigator 为两个屏幕进行滑动过渡?
- mysql - SequelizeEagerLoadingError:角色未与用户关联
- html - 如何更改选择多个元素中活动项目的字体颜色?