Тернарный оператор внутри Action <T>не работает - PullRequest
3 голосов
/ 21 мая 2011

Имейте делегата Action и пытайтесь использовать внутри него троичный оператор с лямбдами:

Action<string> action = new Action<string>( str => (str == null) ? 
               Console.WriteLine("isnull") : Console.WriteLine("isnotnull")

Дает старую ошибку "только присваивание, уменьшение и т. Д. Разрешено".

Возможно ли это как-то?

Ответы [ 4 ]

5 голосов
/ 21 мая 2011

Вы должны сделать это так:

var action = new Action<string>(str => Console.WriteLine((str == null) ? "isnull" : "isnotnull"));
2 голосов
/ 21 мая 2011
Action<string> action = new Action<string>( str => 
                    { 
                        if (str == null)
                           Console.WriteLine("isnull");
                        else
                           Console.WriteLine("isnotnull");
                    });
1 голос
/ 21 мая 2011

Я считаю, что троичный оператор должен что-то вернуть. В вашем случае это ничего не возвращает, просто выполняет оператор. Как сказал Reddog, вы должны поместить свою троицу в вызов Console.WriteLine, который на самом деле меньше кода:)

0 голосов
/ 21 мая 2011

Проблема не в лямбде, а в том, что второе и третье выражение в троичном операторе должно что-то возвращать. Console.WriteLine имеет void тип возврата и не может быть использован, как вы пытаетесь. Решение состоит в том, чтобы поместить троичный оператор внутри вызова в Console.WriteLine:

Console.WriteLine(str == null ? "isnull" : "isnotnull")

Вы можете использовать это выражение в своей лямбде.

...