【问题标题】:Cannot assign lambda expression to anonymous type property无法将 lambda 表达式分配给匿名类型属性
【发布时间】:2017-08-09 16:30:26
【问题描述】:

为什么我不能将Func<MyModel,bool> 类型的参数从Html.Action 传递给我的Controller?当我尝试以下代码时,它给了我这样的错误:

public PartialViewResult MyMethod(Func<MyModel,bool> lambda)
{
}

在 Razor 中:

@{var result = Html.Action("MyMethod", "MyController" , new { lambda = c => !c.Checked});}

错误:

无法将 lambda 表达式分配给匿名类型属性

这不是一个重复的问题,因为该问题正在寻找为什么会发生这种情况,但我正在寻找解决方案。

【问题讨论】:

  • 因为Html.Action 动态确定实际方法(在您的情况下为MyMethod)并且没有关于您的方法的任何编译时信息。因此,它无法推断 lambda 表达式的实际类型
  • @Kolichikov 这个问题正在寻找为什么会发生这种情况,但我正在寻找解决方案。
  • @haim770 好吧,如果我将其作为字符串发送,那么如何将字符串转换为 func?我能做什么?
  • 你试过投射吗? @{var result = Html.Action("MyMethod", "MyController" , new { lambda = (Func&lt;MyModel,bool&gt;)(c =&gt; !c.Checked)});}.

标签: c# asp.net-mvc linq lambda


【解决方案1】:
@{ var result = Html.Action("MyMethod", "MyController", new { lambda = new Func<Model,bool>( c => !c.Checked) }); }

您可以通过在其构造函数中传递 lambda 来分配新的 Func 类型对象。不允许将 lambda 或匿名方法分配给匿名属性,因为我们无法从 lambda 或匿名方法显式推断委托的类型。

【讨论】:

  • 这与实际问题无关。 Html.Action 返回一个 url 字符串。您不能将 lambda 作为 url 参数传递。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多