CẬP NHẬT: Tôi cần phải đề cập trong bài đăng gốc mà tôi muốn tìm hiểu thêm về generics ở đây. Tôi biết rằng điều này có thể được thực hiện bằng cách sửa đổi lớp cơ sở hoặc tạo một giao diện mà cả hai lớp tài liệu đều thực hiện. Nhưng vì mục đích của bài tập này, tôi chỉ thực sự quan tâm đến các giải pháp không yêu cầu bất kỳ sửa đổi nào đối với các lớp tài liệu hoặc lớp cơ sở của chúng. Tôi nghĩ rằng thực tế là câu hỏi liên quan đến các phương pháp mở rộng sẽ ngụ ý điều này.Làm cách nào để cấu trúc lại các phương pháp chung này?
Tôi đã viết hai phương pháp mở rộng chung gần giống hệt nhau và tôi đang cố gắng tìm ra cách tôi có thể cấu trúc lại chúng thành một phương thức đơn lẻ. Chúng khác nhau chỉ trong một hoạt động trên danh sách và khác trên danh sách, và các thuộc tính tôi quan tâm là AssetID cho AssetDocument và PersonID cho PersonDocument. Mặc dù AssetDocument và PersonDocument có cùng một lớp cơ sở nhưng các đặc tính được định nghĩa trong mỗi lớp vì vậy tôi không nghĩ điều đó sẽ giúp ích. Tôi đã cố gắng
public static string ToCSVList<T>(this T list) where T : List<PersonDocument>, List<AssetDocument>
suy nghĩ sau đó tôi có thể có thể kiểm tra các loại và hành động phù hợp nhưng kết quả này trong các lỗi cú pháp
Loại tham số 'T' thừa hưởng hạn chế mâu thuẫn
Đây là những phương pháp mà tôi muốn cấu trúc lại thành một phương pháp duy nhất nhưng có lẽ tôi chỉ đơn giản là đi overboard và họ sẽ tốt nhất là trái như họ đang có. Tôi muốn nghe những gì bạn nghĩ.
public static string ToCSVList<T>(this T list) where T : List<AssetDocument>
{
var sb = new StringBuilder(list.Count * 36 + list.Count);
string delimiter = String.Empty;
foreach (var document in list)
{
sb.Append(delimiter + document.AssetID.ToString());
delimiter = ",";
}
return sb.ToString();
}
public static string ToCSVList<T>(this T list) where T : List<PersonDocument>
{
var sb = new StringBuilder(list.Count * 36 + list.Count);
string delimiter = String.Empty;
foreach (var document in list)
{
sb.Append(delimiter + document.PersonID.ToString());
delimiter = ",";
}
return sb.ToString();
}
làm AssetDocument và PersonDocument có nguồn gốc từ một lớp cơ sở chung/giao diện? – Preets