我在这里提出的许多问题涉及IEquatable的实现.我发现正确实现起来非常困难,因为在天真的实现中存在许多隐藏的错误,我发现的关于它的文章非常不完整.我想找到或写出一个必须包括的权威参考:
这样一个完整的参考已经存在?
PS:即使是MSDN引用对我来说也是有缺陷的
List1包含项目{ A, B }并List2包含项目{ A, B, C }.
我需要的是{ C }在使用Except Linq扩展时返回.相反,我得到了返回{ A, B },如果我在表达式中翻转列表,结果是{ A, B, C }.
我是否误解了Except的观点?还有其他我没有看到使用的扩展吗?
到目前为止,我已经查看并尝试了很多不同的帖子,但没有成功.
var except = List1.Except(List2); //This is the line I have thus far
Run Code Online (Sandbox Code Playgroud)
编辑:是的我正在比较简单的对象.我从未使用过IEqualityComparer,了解它很有趣.
谢谢大家的帮助.问题不是实现比较器.链接的博客文章和下面的示例有帮助.
我有一个自定义列表列表.返回所有项目.Info的结构如下:
public class Info
{
public string Code { get; set; }
public string ClinicianDescription { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想从列表中排除任何Info对象,其中Code属性在单独的List中等于任何值.
在干净的方式之后,我尝试使用.Except(),但我必须将List转换为看起来不正确的相同对象.
到目前为止我尝试过这样的事情:
List<int> ids = contactList;
var List<Info> test = info.RemoveAll(x => ids.Any(i => i == x.Code));
Run Code Online (Sandbox Code Playgroud) 类:
public class Point : IEqualityComparer<Point>
{
public char HorizontalPosition { get; set; }
public int VerticalPosition { get; set; }
public Point(char horizontalPosition, int verticalPosition)
{
HorizontalPosition = char.ToUpper(horizontalPosition);
VerticalPosition = verticalPosition;
}
public bool Equals(Point x, Point y)
{
return (x.VerticalPosition == y.VerticalPosition && x.HorizontalPosition == y.HorizontalPosition);
}
public int GetHashCode(Point obj)
{
return (obj.HorizontalPosition.GetHashCode() + obj.VerticalPosition.GetHashCode());
}
}
Run Code Online (Sandbox Code Playgroud)
我试图在两个集合中找到共同点(交集),但结果是空集合 - 其中应包含两个元素.为什么?我已经实现了IEqualityComparer.我做错了什么吗?
示例集合:
List<Point> first = new List<Point> { new Point('a', 1), new Point('b', 2) };
List<Point> second …Run Code Online (Sandbox Code Playgroud)