文字列の扱いを楽にするために、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)
{
}
}
安全ではない条件とは?