代码之家  ›  专栏  ›  技术社区  ›  Owen Pauling tmatuschek

重构if语句到单个赋值在包含c关键字时中断razor视图

  •  0
  • Owen Pauling tmatuschek  · 技术社区  · 6 年前

    我有一个razor视图,if语句位于foreach语句中:

    @{
        var items = new List<SelectListItem> { new SelectListItem { Value = "0", Text = @"Select Item" } };
        foreach (var @case in Model.Items)
        {
            var selected = false;
            if (Model.MyProp != null && Model.MyProp.Id == @case.Id)
            {
                selected = true;
            }
            items.Add(new SelectListItem { Value = @case.Id.ToString(), Text = @case.MyReference, Selected = selected });
        }
    }
    

    resharper强调if语句并建议“替换为单个赋值”。太好了,我们开始吧!我们得到:

    bool selected = Model.MyProp != null && Model.MyProp.Id == @case.Id;
    

    但是,项目无法生成,并且发生以下两次错误:

    需要cs1513}

    一次用于.cshtml文件,另一次用于 App_Web_44i02p0n.0.cs (我认为是一些临时生成的文件?).

    如果我还原重构,那么它将成功编译。

    我用其他东西替换了关键字名称,这也成功地编译了。

    为什么在使用c关键字时,这条赋值行会导致编译错误?

    0 回复  |  直到 6 年前