相关疑难解决方法(0)

|| (或)Linq中使用C#的操作员

我正在使用linq过滤选择的MessageItems.我编写的方法接受一堆可能为null的参数.如果它们为null,则应忽略该文件的条件.如果它不为null,则使用它来过滤结果.

这是我的理解,当做一个|| operation是C#,如果第一个表达式为true,则不应计算第二个表达式.

例如

if(ExpressionOne() || ExpressionTwo())
{
     // only ExpressionOne was evaluated because it was true
}
Run Code Online (Sandbox Code Playgroud)

现在,在linq,我正在尝试这个:

var messages = (from msg in dc.MessageItems
where  String.IsNullOrEmpty(fromname) || (!String.IsNullOrEmpty(fromname) && msg.FromName.ToLower().Contains(fromname.ToLower()))
select msg);
Run Code Online (Sandbox Code Playgroud)

我原本以为这会是合理的,因为它String.IsNullOrEmpty(fromname)等于是真的和||的第二部分 不会跑.

然而它确实运行了,第二部分

msg.FromName.ToLower().Contains(fromname.ToLower()))
Run Code Online (Sandbox Code Playgroud)

抛出一个空引用异常(因为fromname为null)!! - 我得到一个经典的"对象引用没有设置为对象的实例"异常.

有帮助吗?

.net c# linq null linq-to-sql

12
推荐指数
2
解决办法
3万
查看次数

标签 统计

.net ×1

c# ×1

linq ×1

linq-to-sql ×1

null ×1