我有一个方法,其中包含一个HashSet参数。现在我需要在其中执行不区分大小写的Contains操作:
public void DoSomething(HashSet<string> set, string item)
{
var x = set.Contains(item);
...
}
有没有一种方法可以使现有的 HashSet 不区分大小写(不创建新的 HashSet)?
我正在寻找性能最佳的解决方案。
编辑
由于 Contains 方法可能会被调用多次,所以无法使用 IEnumerable 扩展方法,因为它们的性能比本机 HashSet 的 Contains 方法差。
解决方案
既然我的问题的答案是 NO,即不可能,我已经创建并使用了以下方法:
public HashSet<string> EnsureCaseInsensitive(HashSet<string> set)
{
return set.Comparer == StringComparer.OrdinalIgnoreCase
? set
: new HashSet<string>(set, StringComparer.OrdinalIgnoreCase);
}
HashSet
是否考虑大小写,通过提供一个比较器来实现。然而,值得注意的是,使用不区分大小写的比较器时,集合{"A","a"}只会包含一个元素。 - spender