Ausschließen von Typen von IEnumerable mit linq

8

Wie kann ich Objekte anhand ihres abgeleiteten Typs mit linq-to-objects ausfiltern?

Ich suche nach der Lösung mit der besten Leistung.

Die verwendeten Klassen:

%Vor%

Ich kenne drei Methoden: Verwenden Sie das Schlüsselwort is , verwenden Sie die Methode Except und die Methode OfType .

%Vor%     
Aphelion 01.02.2012, 14:45
quelle

4 Antworten

9

Wenn Sie auch Unterklassen von Duck ausschließen möchten, ist is am besten. Sie können den Code auf .Where(animal => !(animal is Duck));

verkürzen

Ansonsten ist die Empfehlung von sll für GetType am besten

    
Robert Levy 01.02.2012, 14:54
quelle
4
  • Lösung mit Except() ist ziemlich schwer.
  • Beachten Sie, dass die Lösung is - auch SomeDuck class, die von Duck

    geerbt wurde, true zurückgibt %Vor%

Eine andere Lösung könnte sein:

%Vor%     
sll 01.02.2012 14:48
quelle
3

Nach Differenz zwischen OfType & lt; & gt; () und Beim Eintippen von Where () - Erweiterung entspricht der OfType-Aufruf Ihrer Option (a), allerdings mit ist Duck == true , daher würde ich sagen, dass Sie bei der Option bleiben (a ).

    
Hans Jonus 01.02.2012 14:55
quelle
1

Wenn Sie Duck oder eine Unterklasse von Duck nicht zurückgeben möchten, müssen Sie die Methode IsAssignableFrom verwenden:

%Vor%     
Louis Kottmann 01.02.2012 14:55
quelle

Tags und Links