我正在尝试根据它们的 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) 部分。例如,给定 URI http://www.contoso.com/index.htm#search 和 http://user:password @www.contoso.com/index.htm ,Equals 方法将返回 true。
我已经不得不解决这个问题。但是为什么它会这样呢?我可以看到用户信息的逻辑,但看不到片段的逻辑。