C# 通过lambda找出一个列表是否包含另一个列表值

C# 通过lambda找出一个列表是否包含另一个列表值,c#,list,lambda,C#,List,Lambda,我怎么能用兰姆达来做这件事?以确定两个列表是否具有相同的值 void Main() { var list1=新列表{ “a”、“b”、“c” }; var list2=新列表{ “c”、“d”、“e” }; bool listsHaveSameValue=false; foreach(列表1中的var list1Value){ listswavesamevalue=list2.Any(c=>c.Equals(list1Value)); if(listsHaveSameValue){ 打破 } }

我怎么能用兰姆达来做这件事?以确定两个列表是否具有相同的值

void Main()
{
var list1=新列表{
“a”、“b”、“c”
};
var list2=新列表{
“c”、“d”、“e”
};
bool listsHaveSameValue=false;
foreach(列表1中的var list1Value){
listswavesamevalue=list2.Any(c=>c.Equals(list1Value));
if(listsHaveSameValue){
打破
}
}
Debug.WriteLine(listswavesamevalue.ToString());
}

您应该查看
相交

var list1 = new List<string>{ "a", "b", "c"};
var list2 = new List<string>{ "c", "d", "e"};

var doubles = list1.Intersect(list2);
bool listsHaveSameValue = doubles.Any();
var list1=新列表{“a”、“b”、“c”};
var list2=新列表{“c”、“d”、“e”};
var doubles=list1.Intersect(list2);
bool listsHaveSameValue=doubles.Any();
实际上,没有必要使用lambda(正如您所要求的那样)。

尝试使用该方法

使用默认值生成两个序列的集合交点 用于比较值的相等比较器

publicstaticvoidmain(字符串[]args)
{
var list1=新列表{
“a”、“b”、“c”
};
var list2=新列表{
“c”、“d”、“e”
};
IEnumerable dubvalues=list2.Intersect(list1);
foreach(dubvalues中的VarI)
{
Console.WriteLine(i);//输出为c
}
}

这是一个。

您正在有效地搜索最后一个值

确定所有元素是否相同(不考虑列表中的顺序)

你应该使用

 listsHaveSameValue = listsHaveSameValue && list2.Any(c => c.Equals(list1Value));
而不是

 listsHaveSameValue = list2.Any(c => c.Equals(list1Value));
确定
list1
list2
是否具有相同元素的Linq方法之一是使用

你应该使用


列表3包含出现在两个列表中的元素,这将检查是否至少存在一个公共元素

list1.Any(i => list2.Contains(i));

应该返回true或false。

不,这不是问题的目的。@JLRishe我理解,但问题的一部分是“我如何通过lambda做到这一点?”而“这”的逻辑是错误的。您的第一行仍然没有意义。在上面的例子中,公共项恰好是列表1中的最后一项,但问题没有表明提问者只是想检查最后一项是否匹配。我同意你的意见,并删除了第一行。你是否试图确定列表是否具有所有相同的值(即相同的列表,但允许不同的顺序)? 列表2是否具有列表1所具有的所有值?或者他们是否至少有一个共同点?您要求lambda的动机是什么?您当前的代码只检查最后一个值。在这7个答案中,没有一个对您没有帮助?使用lambda表达式的动机是使代码更短,而不需要循环另一个列表。
 listsHaveSameValue = list2.Any(c => c.Equals(list1Value));
listsHaveSameValue = list1.OrderBy(x=>x).SequenceEqual(list2.OrderBy(x=>x)
var list3 = list2.Intersect(list1);
list1.Any(i => list2.Contains(i));
list1.Intersect(list2).Any()