c# - 与我类(class)的名单不同

标签 c# list

我有一个类:

private class Part
{
    public string Id { get; set; }
    public string Class { get; set; }

    public override bool Equals(object obj)
    {
        Part part = obj as Part;

        return this.Id == part.Id;
    }
}

我还有一个这个类的列表,所以我需要在这个列表上使用 distinct。这就是我所做的:

List<Part> parts = new List<Part>();
//adding items
parts = parts.Distinct().ToList();

但是没有任何反应。谁能告诉我怎么了?

最佳答案

当覆盖 Equals 时,您还必须覆盖 GetHashCode:

private class Part
{
    public string Id { get; set; }
    public string Class { get; set; }

    // Whenever overiding Equals
    // You have to override this method too
    public override int GetHashCode() {
      return String.IsNullOrEmpty(Id) ? 0 : Id.GetHashCode();
    }

    public override bool Equals(object obj)
    {
        Part part = obj as Part;

        // if obj is not of Part you should return false
        if (Object.ReferenceEquals(null, part))
          return false; 

        return this.Id == part.Id;
    }
}

不当行为的原因Distinct first tests GetHashCode并且只有这样 Equals

关于c# - 与我类(class)的名单不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23486761/

相关文章:

c# - 无法处理 ThreadAbortException

c# - 从代码隐藏中获取 .NET 中的文件路径

sql - 无法将字段创建转换为 bigint

python - 统计按 ID 分组的列表中的更改

list - 包含列表理解的嵌套函数

c# - ListBox SelectionChanged WP7 使用参数导航

c# - 如何使用 NHibernate 创建标签系统(多对多)

c# - 使用 JSON.Net 序列化包含撇号的字符串

python - 如何确定嵌套列表中的所有元素是否唯一?

python - 如何从 3 个列表中制作字典