【发布时间】:2021-03-22 12:55:43
【问题描述】:
我知道有几个关于这个问题的 SO 帖子,我在提出当前解决方案时使用了它们。
查看下面的 4 行代码,前三行不起作用,但第四行是(!?),我不明白为什么会这样。前两个只检查一个字符串:“Where values that contains 'string'”,后两个检查一个字符串列表“Where values that contains any strings in this list”
contactsDynamicResponses.Values.Where(cdr => cdr.Firstname.Contains(firstName)).ToList();
contactsDynamicResponses.Values.Where(cdr => cdr.Lastname.Contains(lastName)).ToList();
contactsDynamicResponses.Values.Where(cdr => accountIdsList.Any(ail => cdr.AccountId.Contains(ail))).ToList();
contactsDynamicResponses.Values.Where(cdr => contactIdsList.Any(cil => cdr.ContactId.Contains(cil))).ToList();
我的目标是根据输入到函数中的搜索过滤器过滤列表。下面是我得到的错误,这让我觉得contactsDynamicResponses.Values 有问题,这就是这里的问题,但我迷路了。
System.NullReferenceException: '对象引用未设置为对象的实例。' Project.Entities.Contact.Models.Dynamics.ContactDynamicsResponse.Firstname.get 返回 null。
行的完整外观:
contactsDynamicResponses.Values = string.IsNullOrEmpty(firstName) ? contactsDynamicResponses.Values : contactsDynamicResponses.Values.Where(cdr => cdr.Firstname.Contains(firstName)).ToList();
contactsDynamicResponses.Values = string.IsNullOrEmpty(lastName) ? contactsDynamicResponses.Values : contactsDynamicResponses.Values.Where(cdr => cdr.Lastname.Contains(lastName)).ToList();
contactsDynamicResponses.Values = accountIdsList == null ? contactsDynamicResponses.Values : contactsDynamicResponses.Values.Where(cdr => accountIdsList.Any(ail => cdr.AccountId.Contains(ail))).ToList();
contactsDynamicResponses.Values = contactIdsList == null ? contactsDynamicResponses.Values : contactsDynamicResponses.Values.Where(cdr => contactIdsList.Any(cil => cdr.ContactId.Contains(cil))).ToList();
欢迎任何想法!谢谢!
【问题讨论】:
-
看来你应该在
Contains和FirstName和LastName上调用Contains之前添加空检查,因为这些属性可能会为空并在此处导致您的异常 -
异常已经告诉你问题出在哪里:
ContactDynamicsResponse.Firstname.get returned null.。所以 Firstname 是 null 并且你在一个为 null 的字符串上调用.Contains()所以你得到一个NullReferenceException