【问题标题】:Assigning values via a Lambda Expressions?通过 Lambda 表达式赋值?
【发布时间】:2011-12-17 12:33:01
【问题描述】:

我知道以下引用:

原因是 lambda 表达式可以转换为委托类型或表达式树 - 但它必须知道哪种委托类型。只知道签名是不够的。

问题是我仍然纠结于如何解决我的问题。

有人可以判断以下是否可能吗?

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

错误:

无法将 lambda 表达式转换为类型“bool”,因为它不是委托类型

我理解这个错误,但我真的很想知道如何解决这个问题,因为我已经多次从这个错误中反弹,并且根本没有学会如何正确使用 lamda 表达式就值分配而言。

感谢小伙伴们的快速回复:

IMO,如果有以下可能,那就太棒了:

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

大声笑,我认为这行不通,但行代码很漂亮,对我来说,这看起来很棒,也是我所期望的。下面的答案似乎暗示了,哈哈!

【问题讨论】:

  • 您的代码对我来说没有任何意义。 Lambda 表达了一些函数(无论是以实际函数的形式还是表达式的形式),您如何期望将类似的东西分配给bool?那应该怎么做?

标签: c# .net lambda


【解决方案1】:

问题是 lambda 在评估时返回 bool,但它本身不是 bool

您可以执行以下操作:

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

这会将 lambda 分配给一个变量,然后可以使用该变量调用 lambda,并返回所需的 bool 值。

【讨论】:

  • 这是符合我视觉的那一款!还教我现在如何做到这一点。
【解决方案2】:
bool isStaff = selectedPerson.PersonType == "Staff";

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

【讨论】:

  • 从技术上讲,我会在任何一天使用前半部分,但现在值得在 StackOverflow.com 上提出一两个问题来尝试学习一些东西。当前半部分简单直接时,后半部分的工作量更大。
【解决方案3】:

正如编译器所说,您需要分配给委托或表达式树类型。比如:

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

现在你还没有解释你真正想要做什么,或者selectedPerson 是什么。以上将捕获 selectedPerson 变量 - 但根据 the_ajp 的回答,您可能实际上想要一个 Func&lt;Person, bool&gt;

【讨论】:

  • 当 lambda 表达式作为一种速记语法被推向市场时,这真的让我感到厌烦,但在某些情况下它却不是简单直接的。
  • @IbrarMumtaz:嗯,它们比替代品要短——尽管我很困惑为什么你更喜欢接受答案中的版本,使用大括号和返回语句,而不是这里更简洁的版本。
猜你喜欢
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多