18
ความแตกต่าง () กับแลมบ์ดา?
ใช่ฉันมีจำนวนมากและต้องการรับค่าที่แตกต่างจากมัน ใช้มีแน่นอนวิธีขยายที่เรียกว่าSystem.Linq Distinctในกรณีง่าย ๆ มันสามารถใช้โดยไม่มีพารามิเตอร์เช่น: var distinctValues = myStringList.Distinct(); ดีและดี แต่ถ้าฉันมีจำนวนวัตถุที่ฉันต้องระบุความเท่าเทียมกันเกินพิกัดที่มีอยู่เท่านั้นคือ: var distinctValues = myCustomerList.Distinct(someEqualityComparer); อาร์กิวเมนต์เท่าเทียมกัน Comparer IEqualityComparer<T>ต้องเป็นตัวอย่างของ แน่นอนว่าฉันสามารถทำสิ่งนี้ได้ แต่มันค่อนข้างละเอียดและดูดี สิ่งที่ฉันคาดหวังก็คือโอเวอร์โหลดที่จะเอาแลมบ์ดาพูด Func <T, T, bool>: var distinctValues = myCustomerList.Distinct((c1, c2) => c1.CustomerId == c2.CustomerId); มีใครทราบบ้างไหมว่าส่วนขยายดังกล่าวมีอยู่หรือไม่ หรือฉันกำลังพลาดอะไรอยู่? หรือมีวิธีระบุ IEqualityComparer inline (ทำให้ลำบากใจฉัน) หรือไม่ ปรับปรุง ฉันพบคำตอบของ Anders Hejlsberg ต่อการโพสต์ในฟอรัม MSDN ในหัวข้อนี้ เขาพูดว่า: ปัญหาที่คุณจะพบคือเมื่อวัตถุสองตัวเปรียบเทียบกันเท่ากับพวกเขาจะต้องมีค่าส่งคืน …