【发布时间】:2020-08-05 09:03:13
【问题描述】:
我有一个带有错误的 HashSet,<Error>ErrorList。
“错误”具有属性“文件”和“块”。
所以我用一些错误填充我的 HashSet,其中一些是完全相同的,因此会重复。 HashSet 完全可以容忍多次出现。作为最后一次尝试,我创建了一个单独的列表并加以区分:List<Error> noDupes = ErrorList.Distinct().ToList();
但在这里我的名单也保持不变。为什么 hashset 和我的 noDupes 列表都不起作用?有替代解决方案吗?
这是我的代码的重要部分:
#region Properties
HashSet<Error> ErrorList { get; set; } = new HashSet<Error>();
private Stopwatch StopWatch { get; set; } = new Stopwatch();
private string CSVFile { get; set; } = null;
int n;
#endregion
ErrorList.Add(new Error
{
File = x,
Block = block
}); ;
n = FileCall.IndexOf(i);
int p = n * 100 / FileCall.Count;
SetConsoleProgress(n.ToString("N0"), p);
}
}
int nx = 0;
List<Error> noDupes = ErrorList.Distinct().ToList();
错误类:
namespace ApplicationNamespace
{
public class Error
{
public string File { set; get; }
public int Block { set; get; }
}
}
【问题讨论】:
-
可能是因为您的课程没有实现哈希码?如果您不提供该哈希码的任何信息,基于 hash 的集合应如何自动计算有意义的哈希?
-
请贴出
Error的定义。HashSet类不能自动知道您认为“相等”或“重复”的内容。显示您的定义。 -
请考虑,仅仅因为两个对象在某些属性上共享相同的值并不会使这些对象相等。否则两个名叫约翰的人将是同一个人,他们很确定不是。您必须向您的程序提供平等对您意味着什么。
-
添加
Equals和GetHashCode方法的覆盖,或者实现IEquatable<Error>接口