estoy tratando de mantener una colección de objetos en función de su URI:¿Por qué se ignora el Fragmento de un Uri en el método Equals?
public class ConceptCollection : KeyedCollection<Uri, Concept> {
protected override Uri GetKeyForItem(Concept item) {
return item.Uri;
}
}
Sin embargo, el URI regularmente única diferencia basado en el fragmento de la URI. Por lo tanto, la siguiente provoca un error:
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.
por 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.
me he resignado a tener que cortar alrededor de este. Pero, ¿por qué se comporta de esta manera? Puedo ver la lógica para la información del usuario, pero no para el fragmento.
Cualquiera de los marcos RDF con los que he trabajado han tenido que implementar su propia clase Uri como .NET System.Uri implementación no mantiene la pureza del Uri original. Podría usar System.Uri.OriginalString para evitar esto en un proyecto más pequeño ... sin embargo, problemas similares surgirán una y otra vez. –