Conozco dos métodos de conversión de tipos a IEnumerable
desde un Arraylist
en Linq y me pregunto en qué casos usarlos?Cuándo usar Cast() y Oftype() en Linq
por ejemplo
IEnumerable<string> someCollection = arrayList.OfType<string>()
o
IEnumerable<string> someCollection = arrayList.Cast<string>()
¿Cuál es la diferencia entre estos dos métodos y dónde debería aplicar cada caso?
aplausos por eso.Intenté ambos de antemano, pero ambos tenían elementos de todo tipo, por lo que no pude ver la diferencia. –
@SLaks señala correctamente que debe usar 'Cast' cuando esté seguro de que la colección solo contiene elementos 'T'. 'OfType ' es más lento debido a la comprobación de tipo 'is'. Si la colección es del tipo 'IEnumerable ', 'Cast ' simplemente convertirá toda la colección en 'IEnumerable ' y evitará enumerarla; 'OfType ' todavía enumerará. ref: http://stackoverflow.com/questions/11430570/why-is-oftype-faster-than-cast –
hIpPy
Incluso en los casos en que '.Cast()' no arroja cuando se enumera, es ** no es ** equivalente a '.OfType ()'. La razón es que los valores ** 'null' ** siempre se omiten por' .OfType () '. Un ejemplo: 'new System.Collections.ArrayList {" abc "," def ", null," ghi ",} .OfTipo () .Count()' solo dará '3'; la expresión similar con '.Cast ()' evalúa a '4'. –