C# 处理返回Null的XML Web服务方法

C# 处理返回Null的XML Web服务方法,c#,web-services,null,C#,Web Services,Null,WebService.asmx.cs [WebMethod] public HashSet<callInfo> getCalls(string Date, string techID) { HashSet<callInfo> list = new HashSet<callInfo>(); var today = Convert.ToDateTime(Date); var tomorrow = today.AddDays(1).ToStr

WebService.asmx.cs

[WebMethod]
public HashSet<callInfo> getCalls(string Date, string techID)
{
    HashSet<callInfo> list = new HashSet<callInfo>();
    var today = Convert.ToDateTime(Date);
    var tomorrow = today.AddDays(1).ToString("MM-dd-yyyy");
    var comm = new SqlCommand("Select RTrim(CallNbr), RTrim(CustNmbr), RTrim(AdrsCode), RTrim(SvcDescr), RTrim(SrvStat), RTrim(Customer_Reference), Convert(Varchar, ETADTE, 101), Convert(Varchar, ETATME, 108), RTrim(Address1), RTrim(City), RTrim(State), RTrim(Zip), Left(Phone1, 3) + '-' + SubString(Phone1, 5, 3) + '-' + SubString(Phone1, 9, 4) From SVC00200 Where ETADTE In ('" + Date + "','" + tomorrow +"') And TechID = '" + techID + "' And SrvStat Between '20D' And '59Z'", SQL01);
    SQL01.Open();
    SqlDataReader dr = comm.ExecuteReader();

    if (!dr.HasRows) { dr.Close(); SQL01.Close(); return null;}

        while (dr.Read())
        {
            callInfo ci = new callInfo
                              {
                                  callNumber = dr[0].ToString(),
                                  customer = dr[1].ToString(),
                                  adrsCode = dr[2].ToString(),
                                  svcDesc = dr[3].ToString(),
                                  srvStat = dr[4].ToString(),
                                  poNumber = dr[5].ToString(),
                                  etaDte = dr[6].ToString(),
                                  etaTime = dr[7].ToString(),
                                  address = dr[8].ToString(),
                                  city = dr[9].ToString(),
                                  state = dr[10].ToString(),
                                  zip = dr[11].ToString(),
                                  phone = dr[12].ToString()
                              };
            list.Add(ci);
        }

    dr.Close();
    SQL01.Close();
    return list;

}
var calls=inst.getCalls
抛出

“未处理的异常:System.ArgumentNullException:参数不能为空。” 空。参数名称:源“


当没有调用时,webmethod返回null,就像它应该返回的那样。但即使我声明了默认的if空值,它仍然会创建null参数异常。如何处理空返回值?

如果
inst.getCalls(\u date,\u techID)
返回
null
不是以下
.DefaultIfEmpty(defaultCall).ToList()
导致异常吗?

如果
inst.getCalls(\u date,\u techID)
返回
null
不是以下
.DefaultIfEmpty(defaultCall)吗.ToList()
导致异常的原因?

有时太多的内联操作会适得其反。 我将以以下方式更改您的代码:

   var calls = inst.getCalls(_date, _techID);
   if(calls == null) calls = defaultCall;

有时,太多的串联会适得其反。 我将以以下方式更改您的代码:

   var calls = inst.getCalls(_date, _techID);
   if(calls == null) calls = defaultCall;
那样的怎么样?我认为在查询列表之前,需要检查服务调用的结果是否为非null


那样的怎么样?我认为在查询列表之前,您需要检查服务调用的结果是否为非null。

从您的webmethod代码中,您永远不会返回null,但如果不是这样,则最终会调用null。DefaultIfEmpty(…)如果datareader没有任何行,webmethod将返回null。是的,我明白了,现在,如果webmethod中没有这个null,那么当inst.getCalls(_date,_techID)为null时会发生什么?null.DefaultIfEmpty不好!从webmethod的代码中,您永远不会返回null,但如果不是这样,则最终会调用null.DefaultIfEmpty(…)如果datareader没有任何行,webmethod将返回null。是的,我明白了,现在如果这个null从您的webmethod中消失,当inst.getCalls(_date,_techID)为null时会发生什么?null.DefaultIfEmpty不好!就这样。在我检查inst.getCalls是否。。。是空的。谢谢就这样。在我检查inst.getCalls是否。。。是空的。谢谢
    var result = inst.getCalls(_date, _techID)
    if (result != null)
    {
       callInfo defaultCall = new callInfo() {callNumber = "None"};
       var calls = result.ToList().DefaultIfEmpty(defaultCall)

    }