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。为什么会发生这种情况?
您知道您的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