web-dev-qa-db-fra.com

Une expression C # lambda peut-elle avoir plusieurs déclarations?

Une expression lambda en C # peut-elle inclure plusieurs déclarations?

(Edit: Comme indiqué dans plusieurs des réponses ci-dessous, cette question portait à l'origine sur les "lignes" plutôt que sur les "déclarations".)

118
paseena

Sûr:

List<String> items = new List<string>();

var results = items.Where(i => 
       {
                bool result;

                if (i == "THIS")
                    result = true;
                else if (i == "THAT")
                    result = true;
                else
                    result = false;

                return result;
            }
        );
171
RQDQ

Vous pouvez mettre autant de nouvelles lignes que vous le souhaitez dans une expression lambda; C # ignore les nouvelles lignes.

Vous vouliez probablement poser des questions sur plusieurs déclarations .

Plusieurs déclarations peuvent être entourées d'accolades.

Voir le documentation .

28
SLaks

(Je suppose que vous parlez vraiment de déclarations multiples plutôt que de lignes multiples.)

Vous pouvez utiliser plusieurs instructions dans une expression lambda à l'aide d'accolades, mais seule la syntaxe n'utilisant pas d'accolades peut être convertie en un arbre d'expression:

// Valid
Func<int, int> a = x => x + 1;
Func<int, int> b = x => { return x + 1; };        
Expression<Func<int, int>> c = x => x + 1;

// Invalid
Expression<Func<int, int>> d = x => { return x + 1; };
26
Jon Skeet

Depuis C # 7:

Déclaration en une seule ligne:

int expr(int x, int y) => x + y + 1; 

Déclaration multiligne:

int expr(int x, int y) { int z = 8; return x + y + z + 1; };

bien que ces fonctions soient appelées fonctions locales, je pense que cela semble un peu plus propre que ce qui suit et qu’il s’agit en fait du même

Func<int, int, int> a = (x, y) => x + y + 1;

Func<int, int, int> b = (x, y) => { int z = 8; return x + y + z + 1; };
4
BigChief
Func<string, bool> test = (name) => 
{
   if (name == "yes") return true;
   else return false;
}
4
Polity

De expressions lambda (Guide de programmation C #) :

Le corps d'une déclaration lambda peut être constitué d'un nombre quelconque d'énoncés; toutefois, dans la pratique, il n’ya généralement pas plus de deux ou trois personnes.

3
jfs

Avec c # 7.0, vous pouvez utiliser comme ceci aussi

Public string ParentMethod(int i, int x){
    int calculation = (i*x);
    (string info, int result) InternalTuppleMethod(param1, param2)
    {
        var sum = (calculation + 5);
        return ("The calculation is", sum);
    }
}
0
jigar prajapati