2008-09-29 14 views
7

Quiero convertir una instancia de genérico IDictionary a no genérico IDictionary. ¿Puedo hacerlo sin crear una nueva instancia de IDictionary? ¿Hay algún soporte de marco para esta tarea?¿Cómo convertir diccionario genérico a no genérico sin enumerar?

Intenté envolver IDictionary genérico en clase que implementa IDictionary no genético, sin embargo, descubrí que también tengo que convertir ICollection genérico a no genérico, así que voy con la solución Mark Gravell.

Respuesta

18

Todo depende de la implementación concreta que está utilizando.

Por ejemplo, diccionario < TKey, TValue > implementos tanto el genérico IDictionary < TKey, TValue > y la IDictionary no genérico - por lo que si usted tiene un TKey Diccionario <, TValue > se puede utilizar ya sea como sin descendencia:

 Dictionary<int, string> lookup = new Dictionary<int,string>(); 
     IDictionary<int,string> typed = lookup; 
     IDictionary untyped = lookup; 

sin embargo, esto no se aplica necesariamente para todos IDictionary < TKey, TValue > imlpementations, ya que no es cierto que IDictionary < TKey, TValue >: IDictionary. Si está en las entrañas de algún código genérico, puede probar el diccionario actual:

 IDictionary<int,string> typed = ... 
     IDictionary untyped = typed as IDictionary; 
     if(untyped == null) {/* create by enumeration */} 
Cuestiones relacionadas