gpt4 book ai didi

c# - 逻辑短路和 lambda

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:25 25 4
gpt4 key购买 nike

我有以下 lambda 表达式:

response = allDescendants
.Where(n =>
n.Caption.Contains(query) ||
n.Identifier.ToString().Contains(query) ||
n.Type.ToString().Contains(query) ||
n.Path.Contains(query) ||
n.Description.Contains(query) ||
(n.KeyWords != null && n.KeyWords.Any(kw => kw.Contains(query))) ||
n.SubType.Contains(query) ||
n.GroupingBy.Contains(query)
).ToList();

在类定义中,keyWord 字段设置为空:

private string[] keyWords = null;
public string[] KeyWords
{
get { return keyWords; }
set { keyWords = value; }
}

(n.KeyWords != null && n.KeyWords.Any(kw => kw.Contains(query))) 行抛出 NullReferenceException 因为 KeyWord 字段为空,但我给人的印象是,由于对 null 的检查发生在 lambda 之前,因此整个表达式应该短路为 false。这是特定于 lambda 的事情还是我没有得到的其他事情?

编辑:

我找到了罪魁祸首,它是一个将字符串数组设置为 string[1] 而不是 null 的构造函数。

最佳答案

调试器只是标记整行。 n.KeyWords 不为空,因为 && 确实短路了。 (或者,KeyWords 属性第一次返回非空值,第二次返回空值!)

查看调用堆栈以了解崩溃实际发生在哪个方法中。 lambda 将位于顶部,用户可以使用调试器检查 kw 的值为 null。

关于c# - 逻辑短路和 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28452969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com