我有这个方法
private IListFilterOrders(string filterText) { string filterTextLowerCase = filterText.ToLower(); var filtered = _orders.Where(order => order.OrderIdFullOrderNumber.ToLower().Contains(filterTextLowerCase) || order.Name.ToLower().Contains(filterTextLowerCase) || order.Status.ToLower().Contains(filterTextLowerCase) || order.TimeRemaining.ToLower().Contains(filterTextLowerCase) || order.Address.ToLower().Contains(filterTextLowerCase) || order.City.ToLower().Contains(filterTextLowerCase) || order.State.Abbrev.ToLower().Contains(filterTextLowerCase) || order.PostalCode.ToLower().Contains(filterTextLowerCase)).ToList(); return filtered; }
正如您所看到的,属性中可能存在nullreference异常,在这个Where表达式中检查null的最佳方法是什么?
如果您使用的是C#6,则可以?.
在访问对象属性或方法之前添加空检查操作符:order?.State?.ToLower()....
见这对新的空检查经营者的详细信息.
如果您使用的是较低版本,则必须为每个where子句添加额外的空检查: .Where(order => (order.State != null && order.State.ToLower()....)
添加此扩展方法:
public static string NullSafeToLower(this string s) { if (s == null) { s = string.Empty; } return s.ToLower(); }
然后将对“ ToLower”的调用替换为对“ NullSafeToLower”的调用。