gpt4 book ai didi

c# - 在 Razor 中使用 ForEach 扩展

转载 作者:太空狗 更新时间:2023-10-29 22:59:02 25 4
gpt4 key购买 nike

我正在使用 IEnumerable 扩展来遍历集合并获取其索引:

@Model.ForEach((card, i) => {
@<li class="c@(i)">@card.Text</li>;
})

ForEach 扩展如下:

public static void ForEach<T>(this IEnumerable<T> source, Action<T, Int32> action) {

Int32 i = 0;
foreach (T item in source) {
action(item, i);
i++;
}

} // ForEach

但是当我尝试编译它时,我收到以下错误消息:

Argument 1: cannot convert from 'void' to 'System.Web.WebPages.HelperResult'

我该如何解决这个问题?我需要新的扩展吗?

最佳答案

您的问题是 Razor 期望您的 ForEach 方法返回一个值,例如 MvcHtmlString

此外,您不能简单地期望 Razor 翻译您的 foreach 子句的主体以与您的 Action 委托(delegate)一起工作。有一种方法可以让它工作,但它并不那么漂亮。如果您想使用标准的 Razor 语法,我建议使用 James 建议的 @for(...) 子句。

但是,这里有一个有效的实现:

public static MvcHtmlString ForEach<T>(this IEnumerable<T> source, Func<T, Int32, string> selector)
{
return new MvcHtmlString(String.Join("\n", source.Select(selector)));
}

用法:

@Model.ForEach((card, i) =>
{
return "<li class=c" + i + ">" + card.Text + "</li>";
})

关于c# - 在 Razor 中使用 ForEach 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23498283/

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