LINQ - Usando o método de consulta LINQ - OfType<T>
O operador OfType<T> permite filtrar os elementos de um IEnumerable com base em um tipo especificado de uma coleção heterogênea.
Este método é implementado usando a execução deferida. O valor de retorno imediato é um objeto que armazena todas as informações necessárias para executar a ação. A consulta representada por esse método não é executada até que o objeto seja enumerado ou pela chamada de seu método GetEnumerator diretamente ou usando foreach.
O método OfType<TResult>(IEnumerable) retorna apenas os elementos na fonte que podem ser convertidos para o tipo TResult. Para receber uma exceção, se um elemento não puder ser convertido para tipo TResult, use Cast<TResult>(IEnumerable).
Este método é um dos poucos métodos de consulta padrão que pode ser aplicado a uma coleção que possui um tipo não parametrizado tal como um ArrayList. Isto porque OfType <TResult> estende o tipo IEnumerable.
O método OfType<TResult> não só pode ser aplicado a coleções com base no tipo parametrizado IEnumerable<T> mas também a coleções que são baseadas em tipos IEnumerable não-parametrizados.
Ao aplicar o método OfType<TResult> a uma coleção que implementa IEnumerable, você ganha a habilidade de consultar a coleção usando os operadores de consulta padrão. Por exemplo, ao especificar um argumento do tipo object para OfType<TResult> teremos como retorno um objeto do tipo IEnumerable<object>, para o qual os operadores de consulta padrão que podem ser aplicados.
1- Filtrando coleções por tipo especificado
No código a seguir vamos filtrar uma coleção especificando o tipo desejado. No caso iremos filtrar o tipo string:
Namespaces usados :
using System;
using System.Linq;
namespace LINQ_Filtro_OfType { class Program { static void Main(string[] args) { object[] numeros = { "Macoratti", 28, 12 / 12 / 2006, 3.3f, 1, "Miriam", 8.0, "Janice", true, "Jefferson" }; var So_Strings = numeros.OfType<string>(); Console.WriteLine("Relação de amigos..."); Console.WriteLine("-----------------------------"); foreach (var s in So_Strings) { Console.WriteLine(s); } Console.ReadKey(); } } } |
2- Aplicando operadores de consulta padrão após usar OfType<T> em um ArrayList:
Namespaces usados :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Collections;
namespace LINQ_OfType { class Program { static void Main(string[] args) { ArrayList frutas = new System.Collections.ArrayList(5); frutas.Add("Manga"); frutas.Add("Laranja"); frutas.Add("Banana"); frutas.Add(99.0); frutas.Add("Melancia"); frutas.Add("Melão"); // Aplicando o método OfType() ao ArrayList e filtrando o tipo string IEnumerable<string> consulta1 = frutas.OfType<string>(); Console.WriteLine("Os elementos do tipo string são :"); foreach (string fruta in consulta1) { Console.WriteLine(fruta); } // A consulta a seguir mostra que os operadores de consulta padrão tal como // Where() podem ser aplicados a um tipo ArrayList depois de chamar o método OfType(). IEnumerable<string> consulta2 = frutas.OfType<string>().Where(fruta => fruta.ToLower().Contains("n")); Console.WriteLine("\nAs segintes strings contém o caractere 'n':"); foreach (string fruta in consulta2) { Console.WriteLine(fruta); } } } } |
Heb 2:1
Por isso convém atentarmos mais diligentemente para as coisas que ouvimos, para que em tempo algum nos desviemos delas.Heb 2:2
Pois se a palavra falada pelos anjos permaneceu firme, e toda transgressão e desobediência recebeu justa retribuição,Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#