2016-04-06 109 views
-1

所以我有一個可能最多運行3次的測試的大列表,並且可能具有相同的消息2次,並且第三次它可以具有與前兩次運行不同的消息。我正試圖實現一個只顯示獨特測試的代碼,並帶來獨特的結果。 爲了有一個更好的視野,這將是一個使用案例:如何使用C#移除重複結果的重複測試?

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

你有一個'List ',不是嗎? – Valentin

+0

[在C#中刪除清單中的重複項]可能的重複項(http://stackoverflow.com/questions/47752/remove-duplicates-from-a-listt-in-c-sharp) –

回答

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