あなたは、これはsourceで、何らかの理由でLINQを使用することができない場合は、次の
static IEnumerable<TSource> ExceptIterator<TSource>(IEnumerable<TSource> first, IEnumerable<TSource> second, IEqualityComparer<TSource> comparer) {
Set<TSource> set = new Set<TSource>(comparer);
foreach (TSource element in second) set.Add(element);
foreach (TSource element in first)
if (set.Add(element)) yield return element;
}
ですからHashSet<string>
(必要に応じて[OK]を、まだ.NET 3.5)を使用することができます
public static IEnumerable<TSource> ExceptNoLinq<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second, IEqualityComparer<TSource> comparer)
{
HashSet<TSource> set = new HashSet<TSource>(comparer);
foreach (TSource element in second) set.Add(element);
foreach (TSource element in first)
if (set.Add(element)) yield return element;
}
次に、あなたが使用することができます。
var exceptItems = PromotionProduct.ExceptNoLinq(XMLPromotionProduct);
List<string> resultList = new List<string>(exceptItems);
をあなたも.NET 2上にある場合:
public static IEnumerable<TSource> ExceptDotNet2<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second, IEqualityComparer<TSource> comparer)
{
var dict = new Dictionary<TSource, bool>(comparer);
foreach (TSource element in second) dict.Add(element, true);
foreach (TSource element in first)
{
if (!dict.ContainsKey(element))
{
dict.Add(element, true);
yield return element;
}
}
}
あなたが使用しているIDEは無関係です... – Equalsk
あなたの会社が使っている.NETフレームワークのバージョンは何ですか?なぜ> = 3.5を使うことができないのですか? –
".Except()のアルゴリズムはどのように書くことができますか?"それについて考えてみましょう... 2つのループでは、あるリストを別のリストと比較し、他のリストに存在しない要素だけを抽出します。 –