Назначение значений через лямбда-выражения? - PullRequest
3 голосов
/ 17 декабря 2011

Мне известна следующая цитата:

Причина в том, что лямбда-выражение может быть преобразовано в тип делегата или в дерево выражений, но оно должно знать, какой тип делегата. Просто зная подпись недостаточно.

Проблема в том, что я все еще застрял в том, как решить мою проблему.

Может кто-нибудь сказать, возможно ли приведенное ниже?

bool isStaff = () => { return selectedPerson.PersonType == "Staff"; };

Ошибка:

Невозможно преобразовать лямбда-выражение в тип 'bool', поскольку оно не является типом делегата

Я понимаю ошибку, но я действительно хочу знать, как исправить эту проблему, так как я много раз отскакивал от этой ошибки и просто не научился тому, как правильно использовать лямда-выражения в отношении присвоения значения.

Спасибо за быстрые ответы, парни:

ИМО, было бы здорово из нижеприведенного было возможно:

bool isStaff = (selectedPerson, bool) => { return selectedPerson.PersonType == "Staff"; };

Лол, я не думаю, что это работает, но красиво в линейном коде, для меня это выглядит потрясающе и то, что я ожидаю. Ответы ниже, кажется, предлагают иначе lol!

Ответы [ 3 ]

6 голосов
/ 17 декабря 2011
bool isStaff = selectedPerson.PersonType == "Staff";

или

Func<Person, bool> isStaffDelegate = selectedPerson => 
                                         selectedPerson.PersonType == "Staff"; 
bool isStaff = isStaffDelegate(selectedPerson); 
5 голосов
/ 17 декабря 2011

Проблема в том, что лямбда возвращает bool при оценке, но это не bool.

Вы можете сделать следующее:

Func<bool> func = () => { return selectedPerson.PersonType == "Staff"; };
bool isStaff = func();

Это назначает лямбда-переменную, которая затем может быть использована для вызова лямбда-выражения и возврата требуемого значения bool.

2 голосов
/ 17 декабря 2011

Как говорит компилятор, вам необходимо назначить тип дерева делегата или выражения. Так, например:

Func<bool> isStaff = () => selectedPerson.PersonType == "Staff";

Теперь вы не объяснили, что вы на самом деле пытаетесь сделать или что такое selectedPerson. Выше захватит переменную selectedPerson, но вы можете на самом деле вместо Func<Person, bool> хотеть, согласно ответу the_ajp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...