当前位置: 首页 > 编程语言 > C#

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

时间:2023-04-11 03:02:05 C#

C#学习教程:无法将lambda表达式转换为类型'object',因为它不是委托类型this:publicabstractclassMyBaseClass{publicboolInProgress{get;保护集;我从它继承了另一个类,并尝试将InProgress作为委托添加到字典中。但它给了我一个错误。这就是我的派生类的样子:publicabstractclassMyClass{Dictionarydict=newDictionary();dict.Add("InProgress",InProgress=>base.InProgress=InProgress);这是我得到的错误:无法添加转换为“对象”类型的lambda表达式,因为它不是委托类型我在这里做错了什么?最好的方法是强制在字典中登记,但如果您首先将lambda分配给特定的lambda(委托),它应该可以工作(因为编译器知道委托格式):Actioninp=InProgress=>base.InProgress=进行中;字典.Add("进行中",inp);或者直接cast,效果一样dict.Add("InProgress",(Action)(InProgress=>base.InProgress=InProgress));当然,带有对象的字典格式是可以协商的,因为你必须知道委托格式才能使用它。当我缺少使用System.Data.Entity时出现此错误;虽然@Me.Name的解决方案本身是完全有效的,但在某些情况下还有一个额外的技巧可以派上用场(它对我有用):如果你使用这种技术转换多个lambda,你可以考虑转换因子作为辅助方法,按照objectmyDelegateToObject(Actionaction){returnaction;//自动转换为`object`超类,不需要显式转换}然后简单地调用它dict.Add("InProgress",myDelegateToObject(InProgress=>base.InProgress=InProgress));这将节省您的时间-如果您决定更改签名,您将只在一个地方进行。我在编写单元测试时遇到了这个问题。我正在尝试模拟数据库的行为以从存储库返回一个新对象而不实际连接到数据库。确保您的对象具有可用的构造函数。您可能无法以您想要的方式成功实例化对象。确保您是否使用lambda指向构造函数,以便在普通实例化语句中以相同的方式调用构造函数。即returnx=>newFakeObject();在这种情况下说varfake=newFakeObject();不会工作然后lambda也会失败所以要小心。以上就是C#学习教程:lambda表达式无法转换为“object”类型,因为它并不是delegate类型所共有的全部内容。如果对大家有用,需要进一步了解C#学习教程,还望大家多加关注——本文整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: