2010-07-13 27 views
8

Aynı sınıftan iki nesne aldım ve bunları sahaya göre karşılaştırmam gerekiyor. Sorun, yüz alana yakın olmaları ve bunu elle yazmak için helluva çalışmasıdır.Aynı sınıftaki iki nesneyi tonlarca alanla karşılaştırın

Bunu daha kolay bir şekilde yapmanın herhangi bir yolunu biliyor musunuz? Java'daki yansımalar bir çözüm olabilir, ancak yine de bir kesmek gibi görünüyor. Ve sonuçta C# çözümü ararım.

+2

.NET ayrıca yansıma =) –

+2

gibi bir şey: http://stackoverflow.com/questions/986572/hows-to-quick-check-if-data-transfer-two-objects-have-equal-properties- in-c/986617 # 986617 yansıma kullanır, ancak maksimum performans için derler? –

+1

Flakron Bytyqi tarafından önerilen başka bir soru: http://stackoverflow.com/questions/506096/comparing-object-properties-in-c –

cevap

4

İki fikir:

  1. Kullanım yansıma (C# mevcuttur) bunları karşılaştırarak clas alanlarında üzerinde çalışma zamanı ve döngü. Belirli alanları hariç tutabilmek istiyorsanız, bunu bir özellik sınıfı oluşturarak yapabilir ve bu özellikle karşılaştırmak istemediğiniz alanları işaretleyebilirsiniz.

  2. Yansıma döngüsünü alanlar üzerinde aynı şekilde kullanın ve gerekli karşılaştırma kodunu oluşturun. Böylelikle "gerçek" kodunuz olacak, ancak kendiniz yazmak ve sürdürmek zorunda kalmayacaksınız. Nitelikler, oluşturulan karşılaştırma kodunu ince ayar yapmak için kullanılabilir.

1

En iyisi, kodunuzu yeniden kodlamaktır, yüz alanların geçiş yolu.

Kalan bir kod olduğu için yapamazsanız, hangi özniteliğin eşit olduğunu öğrenin.

+1

Bu kodun refactoring ihtiyacı olduğu hakkında iki düşünce yok, sadece Şimdi şu anda daha temiz hale getirmek için zaman. Ayrıca, tüm özniteliklerin eşit olması gerekir. – vlood

0

Şansınız varsa, örnek için benzersiz olan bir veya iki özelliği tanımlayacaksınız - özellikle de bir veritabanı varlığını temsil ediyorsanız - ve bu benzersiz özellikleri yalnızca karşılaştırmanız gerekir.

0

Düzenli İfadeyi bulun Bul ve değiştir. Alanları eklemeniz gerektiğinde bir acıdır * (kaldırılanlar size bir derleme hatası verir), ancak derlenmiş bir şifreye sahip olmanın avantajını elde edersiniz.

Gerçekten de, sınıfı sınıflara ayırmayı düşünün. 100 alan varsa, bileşen sınıflarında gruplanabilirler mi? 100 üye yönetmek zorunda olduğu bir çok karışıklıktır.

İlgili konular