1

我有这个 lambda 表达式:

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

}
else
{

}

myList 包含来自该类的对象,该对象具有以下属性:articleNumber、名称和数量。

这进入 if 而不是 else 尽管有一个名称为“example”和 articleNumber“1”的对象。为什么会这样?

4

6 回答 6

4

你知道!你的lamda之前的权利吗?

你在 if 语句中问的是

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

我不知道这是否有帮助,但如果您提供有关您希望通过该语句完成什么的更多信息,可能会更容易回答。

于 2013-01-04T09:30:24.730 回答
1

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

于 2013-01-04T09:30:38.070 回答
1

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它是一个数字。

于 2013-01-04T09:31:38.337 回答
1

您的列表可能包含一些您不期望的值。

尝试替换&&||看看你会得到什么:

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

只是看看那里有什么。

于 2013-01-04T10:08:08.333 回答
0

你的逻辑没有错,但你可以试试??

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
{

}
于 2013-01-04T09:30:45.727 回答
-1

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。

于 2013-01-04T09:36:55.287 回答