sadece sonunda biz bilmiyorduk Enumerable.Except yöntemi hakkında bir şey olduğu ortaya çıktı bizim kodunda bir hata ayıklama bir saatten fazla geçirmiş olması konusunda: daha genelEnumerable.Except neden DISTINCT öğeleri döndürüyor?
var ilist = new[] { 1, 1, 1, 1 };
var ilist2 = Enumerable.Empty<int>();
ilist.Except(ilist2); // returns { 1 } as opposed to { 1, 1, 1, 1 }
ya:
var ilist3 = new[] { 1 };
var ilist4 = new[] { 1, 1, 2, 2, 3 };
ilist4.Except(ilist3); // returns { 2, 3 } as opposed to { 2, 2, 3 }
MSDN sayfasından baktığımızda:
Bu yöntem ikinci görünmeyen, ilk bu öğeleri döndürür. , saniyede ilk olarak görünmeyen öğeleri de döndürmez.
Ben böyle durumlarda olsun: İlk dizideki her elemanın ikinci 'görünür' ve bu nedenle kaldırılması gerektiğini, çünkü
var ilist = new[] { 1, 1, 1, 1 };
var ilist2 = new[] { 1 };
ilist.Except(ilist2); // returns an empty array
boş bir dizi döner.
Ancak, neden yalnızca ikinci dizide görünmeyen tüm diğer öğelerin ayrı örneklerini alıyoruz? Bu davranışın ardındaki mantık nedir?
içindedir
A Set bu şekilde tarif edilir Bir hata ya da istenmeyen işlevler gibi. MSDN sayfası, farklı bir sonuç hakkında değil diyor ... –
Bu bir hata değil. 'Except' yönteminin ayarlanmış bir işlem olarak tanımlanan SQL' EXCEPT' operatörüne çevrilmesi amaçlanmıştır. Ayarlanmış bir işlem olarak, sadece farklı öğeler döndürülür. "Ayrıcalık", MSDN'in "set" terminolojisini kullanması tarafından ima edilir. – Gabe