-1
爲了讓我的生活更輕鬆地處理字符串,我想使用用StringComparer.OrdinalIgnoreCase初始化的hashset。什麼會使這個HashSet實現失敗?
但有時候,我需要對所有項目進行操作。
這顯然不是我明顯的性能原因實現我的目標的方式,但我想知道這段代碼是否有意義,特別是索引的「Set」部分,以及它如何引起不想要的副作用。
下面是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)
{
}
}
在什麼樣的條件是不是安全的?
爲什麼要在HashSet上使用整數索引器? –
在沒有隱式順序的集合上使用索引是毫無意義和愚蠢的。您所看到的任何有利結果都是具體實施,主要是巧合。 – spender
你的'RemoveWhere'實現是什麼? – Servy