gpt4 book ai didi

c# - 如何通过扩展方法在不实例化对象的情况下使用对象?

转载 作者:行者123 更新时间:2023-11-30 22:10:27 28 4
gpt4 key购买 nike

<分区>

我正在阅读一本 ASP.NET MVC 书籍。这是单元测试之一:

    [TestMethod]
public void Can_Generate_Page_Links()
{
// arrange
HtmlHelper myHelper = null;

PagingInfo pagingInfo = new PagingInfo
{
CurrentPage = 2,
TotalItems = 28,
ItemsPerPage = 10
};
Func<int, string> pageUrlDelegate = i => "Page" + i;

// act
MvcHtmlString result = myHelper.PageLinks(pagingInfo, pageUrlDelegate);

// assert
Assert.AreEqual(result.ToString(),
@"<a href=""Page1"">1</a>" +
@"<a href=""Page2"">2</a>" +
@"<a href=""Page3"">3</a>"
);
}

请注意 myHelper 是如何设置为 null 然后使用的?对 HtmlHelper 做任何事情的唯一代码是这个扩展方法:

    public static MvcHtmlString PageLinks(this HtmlHelper html, PagingInfo pagingInfo, Func<int, string> pageUrl)
{
StringBuilder result = new StringBuilder();
for (int i = 1; i <= pagingInfo.TotalPages; i++)
{
TagBuilder tag = new TagBuilder("a");
tag.MergeAttribute("href", pageUrl(i));
tag.InnerHtml = i.ToString();
if (i == pagingInfo.CurrentPage)
tag.AddCssClass("selected");
result.Append(tag.ToString());
}

return MvcHtmlString.Create(result.ToString());
}

扩展方法是否与允许我们使用设置为 null 的对象有关?如果不是,这里发生了什么?

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