2016-04-06 13 views
-1

So habe ich eine große Liste mit Tests, die möglicherweise maximal 3 mal ausgeführt werden, und möglicherweise die gleiche Nachricht 2 mal, und das dritte Mal könnte es eine andere Nachricht als die vorherigen zwei Läufe haben. Ich versuche, einen Code zu implementieren, der nur einzigartige Tests mit einzigartigen Ergebnissen zeigt. Um eine bessere Sicht zu haben, wäre dies ein Anwendungsfall sein:Wie entfernen Sie doppelte Tests mit doppelten Ergebnissen mit 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"

Wie Sie sehen können, "TestABC" erscheint 2-mal mit der gleiche Fehler und einmal mit einem anderen Fehler. Ich mag die folgende Ausgabe nach der Filterung, um zu sehen:

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

ich zu C# ganz neu bin und würde jede Hilfe oder Anleitung zu schätzen wissen. Danke!

+0

Sie haben eine 'Liste ', nicht wahr? – Valentin

+0

Mögliches Duplikat von [Duplikate aus einer Liste entfernen in C#] (http://stackoverflow.com/questions/47752/remove-duplicates-from-a-listt-in-c-sharp) –

Antwort

0

Zunächst einmal haben Sie IEqualityComparer Schnittstelle implementieren und Distinct Methode

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; 
    } 
} 

verwenden Und wenn Sie verwenden List Verwendung Distinct Methode

testList.Distinct(new Comparer()) 

Aber ich schlage vor Set mit dem IEqualityComparer zu verwenden.

Verwandte Themen