Wenn Sie LINQ aus irgendeinem Grund nicht verwenden können, ist dies der source:
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;
}
So könnte man eine HashSet<string>
(ok, noch benötigt .NET 3.5) verwenden:
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;
}
dann können Sie verwenden:
var exceptItems = PromotionProduct.ExceptNoLinq(XMLPromotionProduct);
List<string> resultList = new List<string>(exceptItems);
Wenn Sie auch auf .NET sind 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;
}
}
}
Welche IDE Sie verwenden, ist irrelevant ... – Equalsk
Welche Version des .NET-Frameworks verwendet Ihr Unternehmen? Warum kannst du nicht eins> = 3.5 benutzen? –
"Wie kann ich den Algorithmus für .Except() schreiben." Denken Sie darüber nach ... in 2 Schleifen würden Sie eine Liste mit einer anderen vergleichen und nur die Elemente extrahieren, die in der anderen nicht vorhanden sind. –