Lambda表达式Any返回错误值

本文关键字:错误 返回 Any 表达式 Lambda | 更新日期: 2023-09-27 17:50:44

我有这个lambda表达式:

if (!myList.Any( x => x.name == "example" && x.articleNumber == "1"))
{
}
else
{
}

myList包含一个来自类的对象,它具有以下属性:articleenumber, name和quantity。

虽然存在一个名称为"example"且articleenumber为"1"的对象,但它进入if而不是else。为什么会发生这种情况?

Lambda表达式Any返回错误值

您知道您的lamda之前的!,对吗?

你在if语句中要求的是

如果myList不包含任何名称为example且文章编号为1的值

我不知道这是否有帮助,但如果你提供更多的信息来说明你想要用语句完成什么,可能会更容易回答。

我能看到的唯一原因是没有name=="example"articleNumber=="1"元素。请注意,==操作符在c#中是区分大小写的,并且可能在某处有空白。

然后你可以使用Equals的重载来比较不区分大小写和删除空白与Trim:

if (!myList.Any( x => x.name.Trim().Equals("example", StringComparison.OrdinalIgnoreCase) 
                   && x.articleNumber == "1"))
{
}
else
{
}

您还应该考虑将articleNumber的类型更改为int,因为它是一个数字。

我很确定这个列表不包含你认为它包含的条目。在if行上设置一个调试标记,并在该点检查列表以查看其中包含的内容。你会发现条目不在那里。请记住,字符串也是区分大小写的,所以如果name确实是Example,它将不匹配。

您的列表可能包含一些您意想不到的值。

试着用||替换&&,看看你会得到什么:

var v = myList.Where(x => x.name == "example" || x.articleNumber == "1").ToList();

看看有什么.

你的逻辑没有问题,但是你可以试试??

if (myList.Where( x => x.name == "example").Where(x=> x.articleNumber == "1").Count() > 0)
{
}
else
{
}

OR删除所有空格和大小写

if (!myList.Any( x => x.name.Trim().ToLower() == "example" && x.articleNumber.Trim().ToLower() == "1"))
{
}
else
{
}

Any的定义:确定序列的任何元素是否存在或是否满足条件。

因此,对于序列中的每个元素,它确定谓词是否与表达式匹配。

myList.Any( x => x.name == "example" && x.articleNumber == "1")

如果列表中任何元素的名称为"example"且articleNumber为1,则返回true。

!myList.Any( x => x.name == "example" && x.articleNumber == "1")

如果列表中没有元素名为"example"且articleNumber为1,则返回true