Lambda表达式导致"类型' System.NullReferenceException'""""

时间:2014-01-29 15:41:02

标签: c# asynchronous collections lambda

.dll中出现'System.NullReferenceException'类型的第一次机会异常。我无法弄清楚为什么all.FindAll(...)每次抛出此异常。原因是因为lambda表达式没有短路AND OR条件导致Name,BillingCity和/ BillingStreet导致这种情况?此外,我对我目前的解决方案采取了更好的方法(比如工作=))。

    public async Task<JsonResult> AutoCompleteSearch(string term)
    {
        // Filter accounts
        List<Account> all = await GetAccounts();
        List<Account> filtered = new List<Account>();

        filtered = all.FindAll(e => 
            ((e.Name != null) && e.Name.ToLower().Contains(term.ToLower())) ||
            ((e.BillingCity != null) && e.BillingCity.ToLower().Contains(term.ToLower())) ||
            ((e.BillingStreet != null) && e.BillingState.ToLower().Contains(term.ToLower())));

        return Json(filtered, JsonRequestBehavior.AllowGet);
    }

2 个答案:

答案 0 :(得分:1)

您似乎有一个简单的拼写错误,可能来自intellisense自动完成。

在这一行:

((e.BillingStreet != null) && e.BillingState.ToLower().Contains(term.ToLower())));

您检查BillingStreet null,然后尝试访问BillingState媒体资源。其中一个可能不是你的意思。

答案 1 :(得分:0)

你永远不会检查e.BillingState。添加

&& e.BillingState

之前

&& e.BillingState.ToLower()