Saltar al contenido

Cuándo usar Cast() y Oftype() en Linq

Esta es la solución más completa que te podemos aportar, pero estúdiala pausadamente y valora si es compatible a tu trabajo.

Solución:

OfType – devolver solo los elementos que se pueden convertir de forma segura al tipo x.
Cast – intentará convertir todos los elementos en tipo x. si alguno de ellos no es de este tipo obtendrás InvalidCastException

EDITAR

por ejemplo:

object[] objs = new object[]  "12345", 12 ;
objs.Cast().ToArray(); //throws InvalidCastException
objs.OfType().ToArray(); //return  "12345" 

LINQ Tip: Enumerable.OfType

Fundamentalmente, Cast() se implementa así:

public IEnumerable Cast(this IEnumerable source)

  foreach(object o in source)
    yield return (T) o;

El uso de una conversión explícita funciona bien, pero dará como resultado una InvalidCastException si la conversión falla. Una variación menos eficiente pero útil de esta idea es OfType():

public IEnumerable OfType(this IEnumerable source)

  foreach(object o in source)
    if(o is T)
      yield return (T) o;

La enumeración devuelta solo incluirá elementos que se puedan convertir de forma segura al tipo especificado.

Deberías llamar Cast() si sabes que todos los elementos son strings.
Si algunos de ellos no son cadenas, obtendrá una excepción.

Deberías llamar OfType() si sabe que algunos de los elementos no son strings y no quieres esos artículos.
Si algunos de ellos no son cadenas, no estarán en el nuevo IEnumerable.

Te mostramos comentarios y calificaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *