当前位置:  开发笔记 > 编程语言 > 正文

Null检查Linq中的String.ToLower表达式

如何解决《Null检查Linq中的String.ToLower表达式》经验,为你挑选了2个好方法。

我有这个方法

private IList FilterOrders(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的最佳方法是什么?



1> Jonathan Car..:

如果您使用的是C#6,则可以?.在访问对象属性或方法之前添加空检查操作符:order?.State?.ToLower()....

见这对新的空检查经营者的详细信息.

如果您使用的是较低版本,则必须为每个where子句添加额外的空检查: .Where(order => (order.State != null && order.State.ToLower()....)


注意`bool?`没有`||'运算符.但是,这里的`|`运算符[按预期工作](https://msdn.microsoft.com/en-CA/library/2cf62fcy.aspx),至少如果你之后只接受`true`.

2> David Alan C..:

添加此扩展方法:

public static string NullSafeToLower(this string s)
{
    if (s == null)
    {
        s = string.Empty;
    }
    return s.ToLower();
}

然后将对“ ToLower”的调用替换为对“ NullSafeToLower”的调用。

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有