Je suis en train de maintenir une collection d'objets en fonction de leur URI:Pourquoi le fragment d'un Uri est-il ignoré dans la méthode Equals?
public class ConceptCollection : KeyedCollection<Uri, Concept> {
protected override Uri GetKeyForItem(Concept item) {
return item.Uri;
}
}
Cependant, l'URI diffère régulièrement que basée sur le fragment du Uri. Donc, ce qui suit provoque une erreur:
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.
par http://msdn.microsoft.com/en-us/library/f83xtf15.aspx:
The Equals method compares the two instances without regard to user information (UserInfo) and fragment ( Fragment) parts that they might contain. For example, given the URIs http://www.contoso.com/index.htm#search and http://user:[email protected]/index.htm , the Equals method would return true.
Je suis résigné à avoir à pirater autour de cela. Mais pourquoi se comporte-t-il de cette façon? Je peux voir la logique de l'info-utilisateur, mais pas pour le fragment.
Tous les frameworks RDF avec lesquels j'ai travaillé ont dû implémenter leur propre classe Uri comme système .NET. L'implémentation Uri ne maintient pas la pureté de l'Uri d'origine. Vous pouvez utiliser System.Uri.OriginalString pour éviter cela sur un projet plus petit ... des problèmes similaires surgiront encore et encore bien. –