URIに基づいてオブジェクトのコレクションを維持しようとしています:
public class ConceptCollection : KeyedCollection<Uri, Concept> {
protected override Uri GetKeyForItem(Concept item) {
return item.Uri;
}
}
ただし、URI は通常、Uri のフラグメントに基づいてのみ異なります。したがって、次の場合はエラーが発生します。
ConceptCollection wines = new ConceptCollection();
Concept red = new Concept("http://www.w3.org/2002/07/owl#RedWine");
Concept white = new Concept("http://www.w3.org/2002/07/owl#WhiteWine");
wines.Add(red);
wines.Add(white); // Error: An item with the same key has already been added.
http://msdn.microsoft.com/en-us/library/f83xtf15.aspxごと:
Equals メソッドは、ユーザー情報 ( UserInfo) およびフラグメント ( Fragment) 部分に関係なく、2 つのインスタンスを比較します。たとえば、URI が http://www.contoso.com/index.htm#search および http://user:password@www.contoso.com/index.htmの場合、Equals メソッドは true を返します。
私はこれをハックしなければならないことに辞任しています。しかし、なぜこのように振る舞うのでしょうか。ユーザー情報のロジックはわかりますが、フラグメントのロジックはわかりません。