如何使用C#删除重复结果的重复测试?

时间:2016-04-06 14:38:00

标签: c# linq sorting distinct trx

所以我有一个大的列表,测试可能最多运行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#的新手,非常感谢任何帮助或指导。 谢谢!

1 个答案:

答案 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())

但我建议将SetIEqualityComparer一起使用。