使用LINQ查询时CountrySearch属性突然为空引发空引用异常
LINQ查询空引用异常排查与解决
问题根源
你的Countries列表里至少存在一个Port对象,它的CountrySearch属性是null。当LINQ遍历到这个对象时,调用x.CountrySearch.ToLower()就会触发空引用异常——因为null无法调用任何实例方法。
解决方案
方案1:显式判空后执行操作
先检查CountrySearch不为null,再进行大小写转换和包含判断,同时提前处理search可能为null的情况:
private List<Port> DoCountriesSearch(string search) { var lowerSearch = search?.ToLower() ?? string.Empty; return Countries.Where(x => x.CountrySearch != null && x.CountrySearch.ToLower().Contains(lowerSearch)).ToList(); }
方案2:使用空传播运算符简化判空
利用C# 6及以上版本的空传播运算符?.,简化空值判断逻辑:
private List<Port> DoCountriesSearch(string search) { var lowerSearch = search?.ToLower() ?? string.Empty; return Countries.Where(x => x.CountrySearch?.ToLower().Contains(lowerSearch) == true).ToList(); }
补充说明
你之前没遇到该问题,大概率是之前的Countries列表中所有Port的CountrySearch都有有效值,这次数据加载或初始化时混入了CountrySearch为null的对象。可以检查数据源的初始化逻辑,确认是否有数据遗漏或赋值错误的情况。
内容的提问来源于stack exchange,提问作者Guitrum
相关产品推荐
相关产品推荐

