我有兩個IEnumerable
對象,我想驗證它們是否包含其他的所有元素。IEnumerable包含IEnumerable
我使用的是obj1.Intersect(obj2).Any()
,但交叉點不像我所期望的那樣工作。即使只有obj2
中的一個元素存在於obj1
中,它也會返回true。
有什麼方法可以驗證obj2
的所有元素是否存在於obj1
?
我有兩個IEnumerable
對象,我想驗證它們是否包含其他的所有元素。IEnumerable包含IEnumerable
我使用的是obj1.Intersect(obj2).Any()
,但交叉點不像我所期望的那樣工作。即使只有obj2
中的一個元素存在於obj1
中,它也會返回true。
有什麼方法可以驗證obj2
的所有元素是否存在於obj1
?
沒有單一的LINQ方法,它不需要至少指定一個lambda來完成你所需要的。然而,有多種方式可以用LINQ來實現。這裏有幾個選項(以測試是否obj2
是obj1
一個子集):
obj1.Intersect(obj2).Count() == obj2.Count()
或
obj2.All(x=>obj1.Contains(x))
或
obj2.Except(obj1).Any()
使用'All',而不是'Intersect.Any' – zerkms
如果你想要它們的順序相同,你可以使用'SequenceEqual'。否則,您可以檢查交集與子序列具有相同的長度。 – Blorgbeard
@zerkms'All()'不起作用。什麼? 'Any()'表示存在任何項目,'All()'沒有lambda時沒有意義。 – Blorgbeard