我曾经使用sendKeys(Keys.ENTER);
来比较C#中两个List的差异,使用LINQ,如下所示。
WebElement.sendKeys(Keys.RETURN);
但是,我的公司没有使用LINQ,我们使用的是.NET 3。
因此,我无法使用.Except()
。我怎样才能达到同样的目的
或者我如何编写List<string> APromotionProduct= GetAPromotionProduct(PrdA);
List<string> BPromotionProduct = GetBPromotionProduct<string>(PrdB);
List<string> tempList = new List<string>();
tempList = PromotionProduct.Except(XMLPromotionProduct).ToList();
的算法。
答案 0 :(得分:2)
如果由于某种原因你无法使用LINQ,那就是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;
}
所以你可以使用HashSet<string>
(好的,还需要.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;
}
}
}
答案 1 :(得分:1)
Except()是System.Linq的扩展方法。如果您可以在文件中引用此命名空间,那么您应该能够使用它。这并不需要Visual Studio。只要您有权访问编译器,就可以编译并运行代码。