Lambda-Ausdruck in der 'if' - Bedingung
Ich bin neu in C#, aber von meinem Verständnis, sollte dieser code funktionieren. Warum geht es nicht?
Dies ist ein Beispiel von meinem code.
List<Car> cars //This has many cars initialized in it already
if (() => {
foreach(Car car in cars){
if (car.door == null) return true;
}
}){then .......}
Einfach gesagt, alles was ich will, der code dazu ist ausgeführt, die if
Aussage, wenn jedes Auto nicht über eine Tür.
Nach dem Versuch zu kompilieren bekomme ich diesen Fehler:
Nicht in der lambda-Ausdruck zum Typ 'bool', weil es keine Stellvertretung geben.
- Sie sind nicht einmal die korrekte Verwendung von lambda-syntax. Es wäre
() => {
..., nicht()={
... natürlich, es würde nicht funktionieren, wenn Sie verwendet wurden, aber das ist eine andere Geschichte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, zu prüfen, ob ein Auto nicht über eine Tür, dann verwenden Sie einfach
Enumerable.Any
- es bestimmt, ob jedes element einer Sequenz eine Bedingung erfüllt:Nur zum Spaß: Sie sollten ausführen lambda zu bekommen, boolean Ergebnis in der Bedingung " wenn (aber für diesen Fall verwenden Alle)
Stellte ich die lokalen Variablen zu machen, die Dinge mehr klar. Aber natürlich kann man dieses Rätsel komplizierter
if
- Anweisung.Action
Gut, die Fehlermeldung sagt alles. Ein
if
- Anweisung erwartet einen booleschen Ausdruck, die eine Stellvertretung nicht. Wenn Sie zum Aufruf des Delegaten (vorausgesetzt, es kehrte einebool
), Sie wäre in Ordnung. Allerdingsif
Sie nicht wissen, zu nennen.Den einfachen Weg, dies zu tun ist mit der
Any
LINQ-extension-Methode:Den
Any
Methode kennt, um tatsächlich aufgerufen wird der lambda-Ausdruck auf jedes Element der Auflistung, und gibt einenbool
. Dies macht es zu einem gültigen boolschen Ausdruck für dieif
- Anweisung.if
verlangt seine Bedingung ein boolschen Ausdruck - eine Artbool
. Lambda-Ausdrücke sind vom TypFunc<T>
für einige RückgabetypT
und kann daher nicht die Erfüllung dieser Anforderung. (Sie können auch Ausdruck-Baum-Typen, je nach Ableitung aus dem Kontext Ihrer Verwendung, aber Sie können nichtbool
.)In Fall, dass Sie wollen, um tatsächlich etwas tun, um Autos ohne Türen: