Tôi có phương pháp với tham số HashSet. Và tôi cần phải làm các trường hợp không phân biệt chữ hoa chữ thường trong đó:Đặt HashSet <string> không phân biệt chữ hoa chữ thường
public void DoSomething(HashSet<string> set, string item)
{
var x = set.Contains(item);
...
}
Có cách nào để làm cho HashSet không phân biệt chữ hoa chữ thường (không tạo mới)?
Tôi đang tìm giải pháp có hiệu quả tốt nhất.
Sửa
Chứa có thể được gọi nhiều lần. Vì vậy, các phần mở rộng của IEnumerable không được chấp nhận đối với tôi do hiệu suất thấp hơn so với phương thức HashSet Contains gốc.
Giải pháp
Kể từ khi, câu trả lời cho câu hỏi của tôi là NO, nó là không thể, tôi đã tạo ra và sử dụng phương pháp sau đây:
public HashSet<string> EnsureCaseInsensitive(HashSet<string> set)
{
return set.Comparer == StringComparer.OrdinalIgnoreCase
? set
: new HashSet<string>(set, StringComparer.OrdinalIgnoreCase);
}
Có thể bạn sẽ phải tạo một cái mới ... –
Có thể trùng lặp: http://stackoverflow.com/questions/2667635/how-to-use-hashsetstring-contains-method-in-case-insensitive- mode (xem câu trả lời của user414076) –
Bạn cần quyết định xem có phải trường hợp xem xét 'HashSet' hay không bằng cách cung cấp một trình so sánh. Tuy nhiên, đáng xem xét rằng tập hợp {"A", "a"} sẽ chỉ chứa một mục có bộ so sánh phân biệt chữ hoa chữ thường. – spender