Lists.ForEach mit Kriterien anhand von LINQ / LAMBDA auswählen

8

Ich habe eine Liste, ich; nur mit bestimmten Kriterien mit LinQ / LAMBDA auswählen

Mein Code ist

%Vor%

Ich erhalte einen Fehler "Nur Zuweisung, Aufruf, Inkrement, Dekrement und neue Objektausdrücke können als Anweisung verwendet werden" in diesem Teil x.IsAnimal == false

Ich weiß, dass wir dies mit einer for-Schleife leicht erreichen können, aber ich möchte mehr lernen, indem ich LinQ / LAMBDA

verwende     
abc cba 03.01.2013, 12:56
quelle

7 Antworten

18

Verwenden Sie einfach Where und ToList , bevor Sie ForEach verwenden

%Vor%     
krajew4 03.01.2013 12:58
quelle
16

Das funktioniert nicht, weil Sie false{} construct nicht haben können.

%Vor%     
Lews Therin 03.01.2013 13:00
quelle
4

Bitte lesen Sie die Syntax von Lambda-Ausdrücken : Ein Lambda-Ausdruck repräsentiert eine Methode; der Teil vor dem => ist die Liste der Parameter, und der Teil danach ist entweder ein einzelner Ausdruck, dessen Ergebnis zurückgegeben wird, oder ein Methodenkörper.

Sie können Ihre Einschränkung innerhalb des Methodenkörpers hinzufügen:

%Vor%     
O. R. Mapper 03.01.2013 12:58
quelle
3

Sollte etwa so aussehen:

%Vor%

Ich kann sehen, dass sich Leute darüber beschweren, dass sie eine neue Liste erstellen müssen, um ForEach zu verwenden. Sie können dasselbe mit Select tun und bei IEnumerable bleiben:

%Vor%     
LeffeBrune 03.01.2013 12:59
quelle
0

Bitte beachten Sie, dass ein Unterschied zwischen lists.foreach und einer normalen foreach ist. Ein 'normal' für jeden verwendet einen Enumerator, was es illegal macht, die Liste zu ändern, die iteriert wird. Die lists.foreach () verwendet keinen Enumerator (wenn ich mich nicht irre, verwendet sie einen Indexer im Hintergrund), der es ermöglicht, Elemente im Array zu ändern, während Sie gehen.

Hoffe, das hilft

    
rickvdbosch 03.01.2013 13:03
quelle
0

Wenn Sie "ForEach" für verschiedene Arten von Sammlungen verwenden möchten, sollten Sie eine Erweiterung für IEnumerable schreiben:

%Vor%

Mit dieser Erweiterung können Sie vor der Verwendung von ForEach filtern und müssen keine neue Liste mit den gefilterten Elementen erstellen:

%Vor%

Ich bevorzuge die Standardversion:

%Vor%

Nicht sehr lang und deutlich eine Schleife mit Nebeneffekten.

    
kara 27.09.2017 09:33
quelle
-2

Versuchen Sie einen solchen Code:

%Vor%     
Marcin Buciora 03.01.2013 13:03
quelle

Tags und Links