在 Blazor 中的每个 foreach 之间显示逗号

Display comma between each in foreach in Blazor

在主题的 foreach 中的以下代码中,我将如何显示带有逗号和 space 的主题。例如“主题、主题 2、主题 3”?另外,如果计数不小于 1,我将如何只显示一个主题?

<tbody>
        @foreach (var piece in PieceService.Pieces)
        {
            <tr>
                <td>@piece.Id</td>
                <td>@piece.Title</td>
                <td>@piece.Publisher.Name</td>
                <td>@piece.Parts.Count()</td>
                <td>@foreach (var theme in @piece.Themes)
                    {
                        @if (@piece.Themes.Count() > 1)
                        {
                            theme.Title, ;
                        }
                        else
                        {
                            theme.Title;
                        }
                    }
                </td>
                <td align="right">
                    <button class="btn btn-primary" @onclick="(() => ShowPiece(piece.Id))">Show</button>
                    <button class="btn btn-primary" @onclick="(() => EditPiece(piece.Id))">Edit</button>
                    <button class="btn btn-primary" @onclick="(() => DeletePiece(piece.Id))">Delete</button>
                </td>
            </tr>
        }
    </tbody>

在代码块中写一个方法

@code {
    private string GetThemes(xxx themes)
    {
        StringBuilder sb = new StringBuilder();
        themes.ForEach(item => sb.Append($"{item.Title}, "));
        return sb.ToString().Trim().Trim(',');
    }
}

然后:

<td>
  @this.GetThemes(@piece.Themes)
</td>

您不必内联编写所有内容。

C# 有一个您可以使用的 .Last() 方法:

@{
    Piece LastItem = PieceService.Pieces.Last();
    foreach (var item in PieceService)
    {
        @item.Name
        @if (item != LastItem)
        {
            @(", ")
        }
    }
}

我提供此答案作为其他纯 string-based 答案的替代方案,因为它仍然为添加 html 格式留有空间,包括 div 具有单独 onclick 的对象事件等,如果你愿意,稍后再说。

你可以使用这个语句来达到你想要的结果

<td>
    @string.Join(", ", @piece.Themes.Select(x=> x.Title).ToArray())
</td>

一种使用System.Linq的方式。 将 foreach 循环替换为 :

@(piece.Themes.Select(a => a.Title).Aggregate((a,b) => a+","+b ))