【问题标题】:Use Lambda Expression within ASP.NET MVC View using VB.NET使用 VB.NET 在 ASP.NET MVC 视图中使用 Lambda 表达式
【发布时间】:2010-12-10 22:44:34
【问题描述】:

使用 ASP.NET MVC 1.0、.NET 3.5 和 C#,您可以轻松地向方法传递一个 lambda 表达式,该表达式将在方法内执行时执行“Response.Write”一些内容:

<% Html.SomeExtensionMethod(
    () => { <%
        <p>Some page content<p>
    %> }
) %>

方法签名类似这样:

public void SomeExtensionMethod(this HtmlHelper helper, Action pageContent)
{
    pageContent();
}

有谁知道如何使用上面显示的相同方法签名在 VB.NET 中使用 Lambda 表达式执行类似的调用?

我在 VB.NET 中尝试了以下方法,但它不起作用:

<% Html.SomeExtensionMethod(New Action( _
    Function() %> <p>Some Content</p> <% _
    )) %>

我收到一个异常提示“预期表达式”。

谁能帮我解决我做错了什么?你如何在 VB.NET 中做到这一点?

【问题讨论】:

  • 使用反射器。 [谁不讨厌字符数限制]
  • 想知道 - 这种方法的用例是什么?你到底想达到什么目的?
  • 这在 ASP.NET MVC 中非常方便。
  • 这也是一个非常简化的用例,不是完整的使用场景。

标签: asp.net-mvc vb.net lambda


【解决方案1】:

VB.NET 9.0 不支持多语句 lambda 表达式或匿名方法。它还有does not support lambda 表达式不返回值,这意味着您不能声明Action 类型的匿名函数。

否则这可行但毫无意义,因为 lambda 什么都不做:

<% Html.SomeExtensionMethod(New Action(Function() "<p>Some Content</p>"))%>

现在让我们举个例子:

<% Html.SomeExtensionMethod(New Action( _
    Function() %> <p>Some Content</p> <% _
)) %>

应该翻译成这样的:

Html.SomeExtensionMethod(New Action(Function() Html.ViewContext.HttpContext.Response.Write("<p>Some Content</p>")))

在 VB.NET 9.0 中无法编译,因为您的表达式不返回值。

在 VB.NET 10 中you will be able to use the Sub keyword

Html.SomeExtensionMethod(New Action(Sub() Html.ViewContext.HttpContext.Response.Write("<p>Some Content</p>")))

编译得很好。

【讨论】:

  • 这在 3.5 和 4.0 中是不正确的。 VB 在较新版本的 ASP.NET 中支持 lambdas
  • Jason,你如何在 3.5 或 4.0 中做到这一点?
  • @Jason,我没有说 VB.NET 不支持 lambda 表达式。我说目前(VB.NET 10)不支持多语句 lambda 表达式。
  • 对我上一条评论的一点纠正:VB.NET 10 将支持多行 lambda 表达式。 VB.NET 9.0 没有。
  • 看来这是C#优于VB.NET的一种方式
猜你喜欢
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
相关资源
最近更新 更多