为什么我的剃须刀 @if 评估不正确?

Why is my razor @if not evaluating correctly?

为什么我的 @if 语句没有正确计算为真?给定以下剃须刀代码:

@{
    List<string> list = new List<string> { "test 0", "test 1" };

    int index = 0;
}
@foreach (var item in list)
{
    <div index="@index" item="@if (index == 0) { <text>zero</text> }">
        @item
    </div>
    index++;
}

产生这个输出:

<div index="0" item="">
    test 0
</div>
<div index="1" item="">
    test 1
</div>

期望的输出:

<div index="0" item="zero">
    test 0
</div>
<div index="1" item="">
    test 1
</div>

文本 zero 永远不会被渲染,在 div 标签上放置一个断点,在两次迭代中显示 index 2 (!)。我知道这可能是我很想念的东西,但我不知道那是什么。

更新:这没有区别

<div index="@index" item="@if (index == 0)
                              {
                                  <text>zero</text>
                              }">
    @item
</div>

试试这个

@{
   List<string> list = new List<string> { "test 0", "test 1" };
   int index = 0;
}
@foreach (var item in list)
{
    if(index == 0){
    <div index="@index" item="zero">
        @item
        </div>
        index++;
    }
    else if(index == 1)
    {
        <div index="@index" item="">
        @item
        </div>
        index++;
    }
    else
    {
        // more here
    }
}

我想也许你的括号放错了地方。这似乎对我有用... https://dotnetfiddle.net/BohydN(只有网格的右半部分是相关的)。

这是 "by-design",如下所示:https://github.com/aspnet/AspNetCore/issues/9070