使用LINQ的除外<>带有来自外部API的对象的方法

时间:2009-10-05 20:12:31

标签: c# linq

我有一个List<> HTMLAnchor对象(HTMLAnchor是来自外部API的对象)。我想排除点击某些链接,因为它们用于退出等等。

使用LINQ,我可以使用Except运算符。但是,在这里(http://msdn.microsoft.com/en-us/vcsharp/aa336761.aspx#except1),使用自定义类型的示例(如果我没记错,则为Product)不使用Except的重载版本。

此外,如果我使用的是我未定义的类型,规则是否会更改?我写的用于实现IEquality的类是否应该在我的泛型集合(HtmlAnchor)中尝试排除相同的名称?

由于

2 个答案:

答案 0 :(得分:1)

如果您无法控制类型,并且默认的相等操作不够(即。未正确实现等于),则应使用the overload which takes an IEqualityComparer<T> parameter。这是一个您可以自己实现的类,以提供您需要的相等定义。

答案 1 :(得分:1)

如果你想使用默认的Equals方法比较锚点,在这种情况下可能会给你引用相等性,你不需要做任何事情:只需传递一组锚点来排除:

anchors.Except(anchorsToExclude);

如果要排除的序列的成员不是引用相等的(或者HtmlAnchor.Equals认为相等),则要实现的接口是IEqualityComparer<T>。这恰好是为了允许您为未定义的类型提供自定义相等比较,因此规则不会更改 - 您只需使用Except的相应重载。

所以你要创建一个名为eg的类HtmlAnchorEqualityComparer实现IEqualityComparer<HtmlAnchor>,并将其实例传递给Except:

anchors.Except(anchorsToExclude, new HtmlAnchorEqualityComparer())