Tôi muốn đối tượng riêng biệt trong danh sách. Tôi cố gắng thực hiện IEqualityComparer nhưng không thành công. Xin vui lòng nếu ai đó có thể xem xét mã của tôi và cho tôi một số giải thích về IEqualityComparer. Tôi có tình hình sau:Triển khai IEqualityComparer
public class Message
{
public int x { get; set; }
public string y { get; set; }
public string z { get; set; }
public string w { get; set; }
}
public class MessageComparer : IEqualityComparer<Message>
{
public bool Equals(Message x, Message y)
{
if (Object.ReferenceEquals(x, y)) return true;
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
return false;
if (x.x == y.x && x.y == y.y && x.z == y.z && x.w == y.w)
{
return true;
}
return false;
}
public int GetHashCode(Message number)
{
//if (Object.ReferenceEquals(number, null)) return 0;
int hashX = number.x.GetHashCode();
int hashY = number.y == null ? 0 : number.y.GetHashCode();
int hashZ = number.z == null ? 0 : number.z.GetHashCode();
int hashW = number.w == null ? 0 : number.w.GetHashCode();
return hashX^hashY^hashZ^hashW;
}
}
Đây là danh sách của tôi với các đối tượng tin nhắn:
Message m1 = new Message();
m1.x = 1;
m1.y = "A";
m1.z = "B";
m1.w = "C";
Message m2 = new Message();
m2.x = 1;
m2.y = "A";
m2.z = "B";
m2.w = "C";
Message m3 = new Message();
m3.x = 1;
m3.y = "A";
m3.z = "B";
m3.w = "C";
Message m4 = new Message();
m4.x = 2;
m4.y = "A";
m4.z = "B";
m4.w = "C";
Message m5 = new Message();
m5.x = 3;
m5.y = "W";
m5.z = "D";
m5.w = "C";
Message m6 = new Message();
m6.x = 4;
m6.y = "S";
m6.z = "F";
m6.w = "R";
List<Message> collection = new List<Message>();
collection.Add(m1);
collection.Add(m2);
collection.Add(m3);
collection.Add(m4);
collection.Add(m5);
collection.Distinct(new MessageComparer());
Khi tôi gọi riêng biệt() số phương pháp phần tử trong danh sách là như nhau. Cảm ơn bạn.
Bạn đang gán kết quả của các cuộc gọi riêng biệt cho một biến hoặc chỉ kiểm tra danh sách ban đầu? Nếu bạn không chỉ định cho bất cứ điều gì, bạn sẽ cần. 'Distinct()' trả về một 'IEnumerable' thay vì thực hiện cập nhật tại chỗ – eouw0o83hf
Cảm ơn, bạn đã đúng :) – kat1330