使用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中做到这一点的?
答案 0 :(得分:3)
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>")))
将编译正常。