-1

所以我有一个很大的列表,其中可能最多运行 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 次相同的错误,而出现了 1 次不同的错误。我想在过滤后看到以下输出:

testname="TestABC" errormessage="ErrXYZ"
testname="Test3454" errormessage="Err123"
testname="TestABC" errormessage="Err123"
testname="Test3454" errormessage="ErrYTR"
testname="Test3454" errormessage="ErrABC"

我对 C# 很陌生,如果有任何帮助或指导,我将不胜感激。谢谢!

4

1 回答 1

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.

于 2016-04-06T14:42:58.487 回答