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#