2009-12-16 3 views
1

Je suis absolu n00b à LINQ.L'équivalent LINQ pour le code?

Le code de GetAnimals() peut-il être écrit dans LINQ?

class Farm 
{ 
    ObservableCollection<Animal> allAnimals = new ObservableCollection<Animal>(); 

    public IEnumerable<T> GetAnimals<T>() where T: Animal 
    { 
     foreach (var a in allAnimals) 
     { 
      if (a.GetType() == typeof(T)) 
      { 
       yield return (T)a; 
      } 
     } 
    } 
} 

Répondre

10

Vous voulez Enumerable.OfType:

public IEnumerable<T> GetAnimals<T>() where T: Animal 
{ 
    return allAnimals.OfType<T>(); 
} 
+1

me devança - bien qu'il ne semble un peu beaucoup pour le pousser vers une nouvelle méthode – Chris

+0

+1 - Meilleure solution à ce genre de problème :) – cwap

+0

@Chris True. Édité. – ICR

4

Il y a déjà une méthode d'extension pour cela: OfType