2016-04-06 34 views
-1

Muhtemelen en fazla 3 kez çalıştırılan ve muhtemelen aynı mesaja 2 kez sahip olan ve üçüncü kez önceki iki koşuya göre farklı bir mesaja sahip olabilecek büyük bir listem var. Benzersiz sonuçlar ile sadece benzersiz testleri gösterecek bir kod uygulamaya çalışıyorum. Gördüğünüz gibiYinelenen testler C# kullanarak yinelenen sonuçlarla nasıl kaldırılır?

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

, "TEST" ile 2 defa görünür: daha iyi bir görünüm sağlamak için, bu Kullanım örneklerinden olacağını aynı hata ve farklı bir hata ile bir kez.

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

C# için oldukça yeni duyuyorum ve herhangi bir yardım veya rehberlik takdir ediyorum: Ben filtreleme sonra aşağıdaki çıktıyı görmek istiyorum. Teşekkürler! Her şeyden

+0

'Listeniz var, değil mi? – Valentin

+0

Olası çoğaltılabilir [C# içinde Listesinden kopyaları çıkar] (http://stackoverflow.com/questions/47752/remove-duplicates-from-a-listt-in-c-sharp) –

cevap

0

Önce, IEqualityComparer arabirimini uygulayıp Distinct yöntemi

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

kullanmak zorunda Ve List kullanımını Distinct yöntem

testList.Distinct(new Comparer()) 

kullanmak Ama IEqualityComparer ile Set kullanmak işaret ediyorsa.