che sto cercando di mantenere una collezione di oggetti in base alla loro URI:Perché il frammento di un Uri viene ignorato nel metodo Equals?
public class ConceptCollection : KeyedCollection<Uri, Concept> {
protected override Uri GetKeyForItem(Concept item) {
return item.Uri;
}
}
Tuttavia, l'URI regolarmente solo differisce a seconda del Frammento della Uri. Così, la seguente causa un errore:
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.
Per 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.
ho rassegnato a dover mettere mano intorno a questo. Ma perché si comporta in questo modo? Riesco a vedere la logica per le informazioni dell'utente, ma non per il frammento.
Qualsiasi dei framework RDF con cui ho lavorato ha dovuto implementare la propria classe Uri come l'implementazione .NET System.Uri non mantiene la purezza dell'originale Uri. Potresti usare System.Uri.OriginalString per evitarlo su un progetto più piccolo ... problemi simili si ripeteranno ancora e ancora. –