所以我有一个大的列表,测试可能最多运行3次,并且可能有2次相同的消息,并且第三次它可能具有与前两次运行不同的消息。我正在尝试实现一个只显示独特测试的代码,并且具有独特的结果。 为了获得更好的视图,这将是一个用例:
testname="TestABC" errormessage="ErrXYZ"
testname="Test3454" errormessage="Err123"
testname="TestABC" errormessage="Err123"
testname="TestABC" errormessage="ErrXYZ"
testname="Test3454" errormessage="ErrYTR"
testname="Test3454" errormessage="ErrABC"
如您所见," TestABC"出现2次相同的错误,一次出现不同的错误。我希望在过滤后看到以下输出:
testname="TestABC" errormessage="ErrXYZ"
testname="Test3454" errormessage="Err123"
testname="TestABC" errormessage="Err123"
testname="Test3454" errormessage="ErrYTR"
testname="Test3454" errormessage="ErrABC"
我是C#的新手,非常感谢任何帮助或指导。 谢谢!
答案 0 :(得分:0)
首先,您必须实现IEqualityComparer
接口并使用Distinct
方法
class Comparer : IEqualityComparer<Test>
{
public bool Equals(Test x, Test y)
{
return string.Equals(x.testname, y.testname) && string.Equals(x.errormessage, y.errormessage);
}
public int GetHashCode(Test obj)
{
string name = string.Format ("{0}{1}", obj.testname, obj.errormessage);
int hash = 7;
for (int i = 0; i < name.Length; i++)
{
hash = hash * 31 + name[i];
}
return hash;
}
}
如果您使用List
使用Distinct
方法
testList.Distinct(new Comparer())
但我建议将Set与IEqualityComparer
一起使用。