Lambda expression if condition
Je suis novice en C#, mais à partir de ma compréhension de ce code devrait fonctionner. Pourquoi ne pas travailler?
Ceci est un exemple de mon 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 .......}
Tout simplement, tout ce que je veux le code est exécuté la if
instruction si une voiture ne dispose pas d'une porte.
Après avoir essayé de la compilation, j'obtiens cette erreur:
Ne peut pas convertir expression lambda de type 'bool' parce qu'il n'est pas un type délégué.
- Vous n'êtes même pas en utilisant la bonne lambda de la syntaxe. Il serait
() => {
..., pas()={
... bien sûr, ça ne marcherait pas si vous l'utilisiez, mais c'est une autre histoire.
Vous devez vous connecter pour publier un commentaire.
Si vous voulez vérifier si une voiture ne dispose pas d'une porte, puis il suffit d'utiliser
Énumérable.Tout
- il détermine si un élément d'une séquence satisfait à une condition:Juste pour le fun: vous devez exécuter lambda pour obtenir de résultat booléen dans la condition if (mais pour ce cas d'utiliser Tout)
J'ai introduit la variable locale pour rendre les choses plus claires. Mais bien sûr, vous pouvez faire ce puzzle plus compliqué
if
déclaration.Action
Ainsi, l'erreur dit tout. Un
if
déclaration s'attend à une expression booléenne dont un délégué ne l'est pas. Si vous deviez appeler le délégué (en supposant qu'il a renvoyé unbool
), vous devriez être bien. Cependant,if
ne sait pas à l'appeler.Le moyen facile de le faire est avec la
Any
extension LINQ méthode:La
Any
méthode sait à invoquer l'expression lambda sur chaque membre de la collection, et renvoie unbool
. Cela en fait une expression booléenne valide pour laif
déclaration.if
exige sa condition d'être un Boolean expression - un de typebool
. Les Lambdas sont de typeFunc<T>
pour certains type de retourT
et ne peut donc pas satisfaire à cette exigence. (Ils peuvent aussi être l'expression de l'arbre-types, en fonction de l'inférence à partir du contexte de leur utilisation, mais ils ne peuvent pas êtrebool
.)Dans le cas où vous souhaitez réellement faire quelque chose pour les voitures sans les portes: