Tạo danh sách đơn giản (UniqueList) của các mục có thuộc tính Tên chỉ được chứa các mục duy nhất (được định nghĩa là có các tên khác nhau). Ràng buộc vào loại UniqueList có thể là một giao diện:Ràng buộc về thông số loại: giao diện so với lớp trừu tượng
interface INamed
{
string Name { get;}
}
hoặc một lớp trừu tượng:
public abstract class NamedItem
{
public abstract string Name { get; }
}
Vì vậy, các UniqueList có thể là:
class UniqueList<T> : List<T> where T : INamed
hoặc
class UniqueList<T> : List<T> where T : NamedItem
Hàm lớp, AddUni que:
public T AddUnique(T item)
{
T result = Find(x => x.Name == item.Name);
if (result == default(T))
{
Add(item);
return item;
}
return result;
}
Nếu kiểu lớp hạn chế được dựa trên giao diện, kết quả biên soạn trong
Error: Operator '==' cannot be applied to operands of type 'T' and 'T'
tại dòng
if (result == default(T))
Tất cả cũng là nếu tôi căn UniqueList trên trừu tượng lớp học. Có suy nghĩ gì không?
Tại sao bạn không sử dụng một 'HashSet' cho việc này? Có chính xác những gì bạn muốn –
BrokenGlass
Nếu T là một loại giá trị, sẽ Tìm trả về 'mặc định (T)' khi không có gì có thể được tìm thấy? Điều này có nghĩa là 'mặc định (T)' không được phép làm giá trị, có thể không phải là ý định của bạn. –
@BrokenGlass Nhưng anh ấy không tạo ra một tập hợp các chuỗi, anh ấy đang tạo ra một tập hợp các thứ được đặt tên. Anh ta thực sự muốn một 'HashSet' với một 'IEqualityComparer ' –
phoog