如何将 string.join 添加到 foreach 循环

Posted

技术标签:

【中文标题】如何将 string.join 添加到 foreach 循环【英文标题】:How to add string.join to foreach loop 【发布时间】:2021-04-08 02:16:21 【问题描述】:

我在视图上显示我的第 i 个产品的类别,但我想添加一个链接并在它们之间放置逗号。

@for (int i = 0; i < Products.Count(); i++)

    <tr>
        <td>
            <span> @Model.Products[i].ProductName </span>
            @foreach (var item in Model.Products[i].ProductCategories)
            
                <a href="/home/@item.ItemName"> @item.ItemName, </a>
            
        </td>
   </tr>

看起来像这样 => 计算机、技术、桌面,

我想要这个 => 计算机、技术、桌面

我不想在最后一项中使用逗号

我可以这样显示,但我不能添加&lt;a href=""&gt;&lt;/a&gt;

 <span>@string.Join(", ", Model.Products[i].ProductCategories.Select(p => p.Category.CategoryName))</span>

【问题讨论】:

您可以在循环之前添加一个设置为 false 的标志,并在输出链接之前的逗号之前对其进行检查,并在循环结束时将其设置为 true。无论如何,我什至会把逗号放在链接之外。 ItemName 还是CategoryName 【参考方案1】:

我认为您可以使用 LINQ 代替 foreach

@for (int i = 0; i < Products.Count(); i++)

    <tr>
        <td>
            <span> @Model.Products[i].ProductName </span>
            @html.Raw(String.Join(", ", Model.Products[i].ProductCategories.Select(category => $@"<a href=""/home/Html.Encode(category.CategoryName)"">Html.Encode(category.CategoryName)</a>")))
        </td>
   </tr>

但我不会说这是最棒的方式。此时您可能应该使用Html.ActionLink 之类的东西,而不是手动放入a 标记。

【讨论】:

【参考方案2】:

使用蛮力方法……

您是否考虑过使用for 循环而不是foreach 循环?在for 循环内部,如果循环索引j 小于集合计数- 1,则添加逗号。

例如,使用您的代码结构...

@for (int j = 0; j < Model.Products[i].ProductCategories.Count(); j++) 

    If (j < Model.Products[i].ProductCategories.Count() – 1)
    
        <a href="/home/@item.ItemName"> Model.Products[i].ProductCategories[j].ItemName, </a>
     
     else
     
         <a href="/home/@item.ItemName"> Model.Products[i].ProductCategories[j].ItemName</a>
     

【讨论】:

多次调用 Count() 可能会很糟糕,具体取决于 ProductCategories 的实际情况。 @NetMage ...我对这里使用的语言不太熟悉,因为它似乎不是 C#。你说的是真的,但可以用变量来修复。但我的答案也缺少j 索引@item.ItemName 需要索引到j....我可能会删除答案。【参考方案3】:

也许你可以做这样的事情。无法对其进行测试,但应该抓住要点。

<span>
    @string.Join(
        ", </a>", 
        Model.Products[i]
            .ProductCategories
            .Select(
                p => "<a href=\"" + p.Category.CategoryName + "\""))
    </a>
</span>

【讨论】:

以上是关于如何将 string.join 添加到 foreach 循环的主要内容,如果未能解决你的问题,请参考以下文章

Python 3 string.join() 等效?

Laravel如何将变量从选择框传递到url?

应用Itextsharp 添加图片到pdf

string.Join in Linq to Entity queries

使用 String.Join 将数组转换为字符串后从字符串中删除多余的逗号(C#)

string.Join 抛出异常