gpt4 book ai didi

c# - 在 MVC 帮助程序中将参数传递给 Func<>

转载 作者:行者123 更新时间:2023-11-30 17:48:16 24 4
gpt4 key购买 nike

被盗 从互联网上看到了以下代码。方法签名是

public static MvcHtmlString RecordPager(this HtmlHelper html, PagingInfoModel pageInfo, Func<int,string> someUrl )

这在 View 中调用如下:

@Html.RecordPager(Model.PagingInfoModel, x => Url.Action("Index", new { page = x }) )

我的问题是特别是关于最后一个参数,我不太明白你怎么能传递参数x => Url.Action("Index", new { page = x })进入参数

Func<int,string> someUrl

我知道这是 MVC 的 HtmlHelper 等的扩展方法,而 Func 是一个期望 int 并返回 string 的委托(delegate),但是在哪里是参数 x => Url.Action 等中的 int...

您可能已经收集到我不了解 lamba 和 linq 以及匿名函数和所有现代爵士乐,但请为像我这样会遇到同样问题的傻瓜提供一个体面的解释。谢谢。

最佳答案

A Func<int, string>基本上是具有以下签名的委托(delegate):

public delegate string Func(int I)

在 C# 2 之前,将方法传递给委托(delegate)(指向函数的指针)的唯一方法是显式创建一个与上述委托(delegate)具有相同签名的命名方法,如下所示:

public string MyAwsomeFunc(int I)

并且该方法可以传递给包含委托(delegate)作为参数的方法:

public void SomeFunc(Func callback)

C# 2 引入了匿名方法,它使我们能够“即时”创建委托(delegate)处理程序,让编译器为我们创建命名方法:

// Create a delegate. 
delegate string Func(int x);

// Instantiate the delegate using an anonymous method.
Func d = delegate(int k) { /* ... */ };

C# 3 向我们介绍了 Lamba 表达式,这是在 C# 中处理委托(delegate)的首选方式。 lambda 表达式是一种匿名方法,可用于创建委托(delegate)。通过使用 lambda 表达式,您可以编写可作为参数传递或作为函数调用值返回的局部函数:

delegate int del(int i);

del myDelegate = x => x * x // lamba expression syntax
int j = myDelegate(5); //j = 25

在您的方法中发生的事情是它接受 Func<int, string> 的委托(delegate)类型,并使用 lamba 表达式语法:

 x => Url.Action("Index", new { page = x }) )

x 是 Func 的输入参数,它是一个 int,被分配给 page。属性,并且 Url.Action 方法返回一个字符串,这是预期的返回类型。编译器正在为我们生成委托(delegate)处理程序,因此我们不必这样做。这与将以下方法与命名方法一起使用是一样的:

string MyMethod(int I)
{
string result = Url.Action("index", new { page = I });
return result;
}

然后,将 MyMethod 作为参数发送:

@Html.RecordPager(Model.PagingIngModel, MyMethod(someInt));

编辑

一些阅读 Material :

关于c# - 在 MVC 帮助程序中将参数传递给 Func<>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23327527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com