为了让我更轻松地处理字符串,我想使用一个用 StringComparer.OrdinalIgnoreCase 初始化的哈希集。
但有时,我需要对所有项目进行操作。
由于明显的性能原因,这显然不是我实现目标的方式,但我想知道这段代码是否有意义,尤其是索引的“设置”部分,以及它如何对集合造成不必要的副作用.
这是 HashSet 的实现:
public class MyHashSet<T> : HashSet<T>
{
public T this[int index]
{
get
{
int i = 0;
foreach (T t in this)
{
if (i == index)
return t;
i++;
}
throw new IndexOutOfRangeException();
}
set
{
int i = 0;
foreach (T t in this)
{
if (i == index)
{
this.RemoveWhere(element => element.Equals(t));
this.Add(value);
return;
}
i++;
}
throw new IndexOutOfRangeException();
}
}
public MyHashSet()
{
}
public MyHashSet(IEnumerable<T> collection)
: base(collection)
{
}
public MyHashSet(IEnumerable<T> collection, IEqualityComparer<T> comparer)
: base(collection, comparer)
{
}
public MyHashSet(IEqualityComparer<T> comparer)
: base(comparer)
{
}
}
在什么情况下不安全?