Может ли лямбда-выражение C # иметь более одного оператора? - PullRequest
114 голосов
/ 13 апреля 2011

Может ли лямбда-выражение C # включать более одного оператора?

(Изменить: как указано в нескольких ответах ниже, этот вопрос первоначально задавался о «строках», а не «утверждениях».)

Ответы [ 7 ]

169 голосов
/ 13 апреля 2011

Sure:

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;
            }
        );
28 голосов
/ 13 апреля 2011

В лямбда-выражение можно поместить столько строк, сколько вы хотите; C # игнорирует переводы строки.

Вы, вероятно, хотели спросить о нескольких утверждениях .

Несколько скобок могут быть заключены в фигурные скобки.

См. Документацию .

26 голосов
/ 13 апреля 2011

(я предполагаю, что вы на самом деле говорите о нескольких операторах, а не о нескольких строках.)

Вы можете использовать несколько операторов в лямбда-выражении, используя фигурные скобки, но только синтаксис, который не использует фигурные скобкиможно преобразовать в дерево выражений:

// 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; };
4 голосов
/ 13 апреля 2011
Func<string, bool> test = (name) => 
{
   if (name == "yes") return true;
   else return false;
}
3 голосов
/ 15 сентября 2018

Начиная с C # 7:

Однострочный оператор:

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

Многострочный оператор:

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

хотя они называются локальными функциями, я думаю, это выглядит немногочище, чем следующий, и фактически тот же

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; };
3 голосов
/ 13 апреля 2011

С Лямбда-выражения (Руководство по программированию в C #) :

Тело оператора лямбда может состоять из любого числа операторов;однако на практике их обычно не более двух или трех.

0 голосов
/ 08 апреля 2019

С помощью c # 7.0 Вы также можете использовать это

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...