我有这个 lambda 表达式:
if (!myList.Any( x => x.name == "example" && x.articleNumber == "1"))
{
}
else
{
}
myList 包含来自该类的对象,该对象具有以下属性:articleNumber、名称和数量。
这进入 if 而不是 else 尽管有一个名称为“example”和 articleNumber“1”的对象。为什么会这样?
你知道!
你的lamda之前的权利吗?
你在 if 语句中问的是
如果 myList 不包含名称为示例且文章编号为 1 的任何值
我不知道这是否有帮助,但如果您提供有关您希望通过该语句完成什么的更多信息,可能会更容易回答。
我很确定该列表不包含您认为的条目。在 if 行上设置一个调试标记,并在该点检查列表以查看它包含的内容。你会发现入口没有。请记住,字符串也区分大小写,因此如果 name 确实是 Example,它将不匹配。
name=="example"
我能看到的唯一原因是and没有元素articleNumber=="1"
。请注意,该==
运算符在 C# 中区分大小写,并且某处可能存在空格。
然后你可以使用这个重载Equals
来比较不区分大小写并删除空格Trim
:
if (!myList.Any( x => x.name.Trim().Equals("example", StringComparison.OrdinalIgnoreCase)
&& x.articleNumber == "1"))
{
}
else
{
}
您还应该考虑更改 to 的类型,articleNumber
因为int
它是一个数字。
您的列表可能包含一些您不期望的值。
尝试替换&&
,||
看看你会得到什么:
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
{
}
或删除套管中的所有空格和差异
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")
如果 List 的任何元素的名称为“example”且 articleNumber 为 1,则返回 true。
!myList.Any( x => x.name == "example" && x.articleNumber == "1")
如果 List 的 NO 元素的名称为“example”且 articleNumber 为 1,则返回 true。