2014-11-27 4 views
0

Как написать фэнтезийную инструкцию if в одной строке с использованием лямбда?Выполнить действие, основанное на инструкции if, используя lambda

Я хочу иметь что-то вроде этого:

this.SomeBoolValue == false ? (() => MessageBox.Show("False!")) : (() => MessageBox.Show("True!")); 

Благодарности

+0

Очевидное время вопроса: почему? – DavidG

+0

из любопытства, плюс иметь причудливый код. – inside

+0

Последующий вопрос: почему лямбда, здесь нет необходимости? – DavidG

ответ

2

Это действительно глупый, и вы не должны этого делать! Но для учебных целей вот код, который делает то, что вы хотите.

(this.SomeBoolValue == false 
    ? (Action)(() => MessageBox.Show("False!")) 
    : (Action)(() => MessageBox.Show("True!")))(); 
  1. Вы должны отдать свой лямбда в какой-то тип делегата (здесь это Action), потому что лямбда-выражения Бестиповое по умолчанию - они набираются в зависимости от контекста.

  2. Вам необходимо называть лямбда, поэтому в конце есть ().

+0

Не знаю, почему кто-то работает, это правильно. Во всяком случае, я дам вам +1 – DavidG

0

Некоторые 'одной строкой' варианты без использования лямбда, что все достижения той же вещи:

if(this.SomeBoolValue == false) MessageBox.Show("False!"); else MessageBox.Show("True!"); 

MessageBox.Show(this.SomeBoolValue ? "True!" : "False!"); 

MessageBox.Show(string.Format("{0}!", this.SomeBoolValue)); 
Смежные вопросы