button('hey')
вызывает функцию, а не устанавливает ее как обратный вызов.
Существует довольно много путей. Примите A, и B является IEnumerable.
!A.Except(B).Any() && !B.Except(A).Any()
A.Count() == B.Count() && A.Intersect(B).Count() == B.Count()
etc
Я думаю, приказывая, чтобы последовательность была самым быстрым способом, которым можно достигнуть этого.
Я сделал это для слияния новых объектов в набор без дубликатов, оно берет два набора и возвращает все объекты с любыми дубликатами
List<Campaign> nonMatching = (from n in newCampaigns
where !(from e in Existing select e.Id).Contains<int>(n.Id)
select n).ToList<Campaign>();
Теперь путем удаления! для содержит оператор
List<Campaign> nonMatching = (from n in newCampaigns
where (from e in Existing select e.Id).Contains<int>(n.Id)
select n).ToList<Campaign>();
, он возвратит дубликаты
Если Вы действительно просто тестируете, чтобы видеть, существуют ли дубликаты, то предложение leppie должно работать:
if (A.Except(B).Count == 0 && B.Except(A).Count == 0) {...}
, Но если просто необходимо прибыть в IEnumerable без дубликатов:
var result = A.Union(B).Distinct();
Попробуйте класс HashSet:
var enumA = new[] { 1, 2, 3, 4 };
var enumB = new[] { 4, 3, 1, 2 };
var hashSet = new HashSet<int>(enumA);
hashSet.SymmetricExceptWith(enumB);
Console.WriteLine(hashSet.Count == 0); //true => equal
, Но это действительно только работает правильно, если значения отличны.
, Например
var enumA = new[] { 1, 1, 1, 2 };
var enumB = new[] { 1, 2, 2, 2 };
также рассматриваются как "равный" с упомянутым методом.