如何使用lambda在一行中编写一个奇特的if语句?
我希望有这样的东西:
this.SomeBoolValue == false ? (() => MessageBox.Show("False!")) : (() => MessageBox.Show("True!"));
由于
答案 0 :(得分:2)
这真的很蠢,你不应该这样做!但是出于教学目的,这里的代码可以做你想要的。
(this.SomeBoolValue == false
? (Action)(() => MessageBox.Show("False!"))
: (Action)(() => MessageBox.Show("True!")))();
您需要将lambda转换为某种委托类型(此处为Action
),因为默认情况下lambda表达式是无类型的 - 它们是根据上下文键入的。
你需要实际调用lambda,这就是为什么最后有()
的原因。
答案 1 :(得分:0)
一些不使用lambda的“单行”变体都可以实现同样的目的:
if(this.SomeBoolValue == false) MessageBox.Show("False!"); else MessageBox.Show("True!");
MessageBox.Show(this.SomeBoolValue ? "True!" : "False!");
MessageBox.Show(string.Format("{0}!", this.SomeBoolValue));