Tôi muốn một số ý kiến phản hồi về cách chúng ta có thể viết một hàm chung chung để cho phép hai Danh sách được so sánh. Danh sách chứa các đối tượng lớp và chúng tôi muốn lặp qua một danh sách, tìm kiếm cùng một mục trong Danh sách thứ hai và báo cáo bất kỳ sự khác biệt nào.So sánh hai Danh sách cho các khác biệt
Chúng tôi đã có một phương pháp để so sánh các lớp học, vì vậy chúng tôi cần phản hồi về cách chúng tôi có thể cung cấp phương thức (được hiển thị bên dưới) từ hai Danh sách.
Ví dụ: giả sử chúng tôi có lớp "Nhân viên" đơn giản có ba thuộc tính, Tên, ID, Bộ. Chúng tôi muốn báo cáo sự khác biệt giữa Danh sách và Danh sách khác.
Lưu ý:
Cả hai danh sách sẽ luôn chứa cùng một số mục. Như đã đề cập ở trên, chúng ta có một phương pháp chung mà chúng ta sử dụng để so sánh hai lớp, làm thế nào chúng ta có thể kết hợp phương thức này để phục vụ Danh sách, tức là từ một phương thức khác, lặp qua Danh sách và nạp các lớp vào phương thức chung. ... nhưng làm thế nào để chúng ta tìm thấy lớp tương đương trong Danh sách thứ hai để chuyển sang phương thức dưới đây;
public static string CompareTwoClass_ReturnDifferences<T1, T2>(T1 Orig, T2 Dest)
where T1 : class
where T2 : class
{
// Instantiate if necessary
if (Dest == null) throw new ArgumentNullException("Dest", "Destination class must first be instantiated.");
var Differences = CoreFormat.StringNoCharacters;
// Loop through each property in the destination
foreach (var DestProp in Dest.GetType().GetProperties())
{
// Find the matching property in the Orig class and compare
foreach (var OrigProp in Orig.GetType().GetProperties())
{
if (OrigProp.Name != DestProp.Name || OrigProp.PropertyType != DestProp.PropertyType) continue;
if (OrigProp.GetValue(Orig, null).ToString() != DestProp.GetValue(Dest, null).ToString())
Differences = Differences == CoreFormat.StringNoCharacters
? string.Format("{0}: {1} -> {2}", OrigProp.Name,
OrigProp.GetValue(Orig, null),
DestProp.GetValue(Dest, null))
: string.Format("{0} {1}{2}: {3} -> {4}", Differences,
Environment.NewLine,
OrigProp.Name,
OrigProp.GetValue(Orig, null),
DestProp.GetValue(Dest, null));
}
}
return Differences;
}
Bất kỳ đề xuất hoặc ý tưởng nào được đánh giá cao?
Chỉnh sửa: Nhắm mục tiêu .NET 2.0 do đó LINQ không nằm trong câu hỏi.
lol ... không, một cấp cao nhất, hệ thống ứng dụng quan trọng :-) nghiêm túc, cố gắng để thực hiện chức năng này vào một ứng dụng sở thích nhỏ ... tất cả nó học. –
Danh sách có độ dài bằng nhau không? – Noldorin
có, Danh sách có độ dài bằng nhau –