相关疑难解决方法(0)

是否有完整的IEquatable实现引用?

我在这里提出的许多问题涉及IEquatable的实现.我发现正确实现起来非常困难,因为在天真的实现中存在许多隐藏的错误,我发现的关于它的文章非常不完整.我想找到或写出一个必须包括的权威参考:

  • 如何正确实现IEquatable
  • 如何正确覆盖Equals
  • 如何正确覆盖GetHashCode
  • 如何正确实现ToString方法
  • 如何正确实现operator ==
  • 如何实现运算符!=正确

这样一个完整的参考已经存在?

PS:即使是MSDN引用对我来说也是有缺陷的

.net c# equals iequatable gethashcode

46
推荐指数
3
解决办法
2万
查看次数

使用Linq除了不按我的想法工作

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,了解它很有趣.

谢谢大家的帮助.问题不是实现比较器.链接的博客文章和下面的示例有帮助.

.net c# linq list except

16
推荐指数
3
解决办法
3万
查看次数

c#根据另一个List <int>删除自定义列表中的项目

我有一个自定义列表列表.返回所有项目.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)

c# list

2
推荐指数
1
解决办法
210
查看次数

两个点的C#集合不会返回任何结果

类:

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)

c# linq iequalitycomparer

1
推荐指数
2
解决办法
180
查看次数

标签 统计

c# ×4

.net ×2

linq ×2

list ×2

equals ×1

except ×1

gethashcode ×1

iequalitycomparer ×1

iequatable ×1