Error:A local variable named 'Model' cannot be declared in this scope

Error:A local variable named 'Model' cannot be declared in this scope

我正在将列表返回到视图。所以模型是 IEnumerable。它在 foreach 循环中工作正常以获取员工。但是当我在循环中使用这个模型时,它给我错误:

A local variable named 'Model' cannot be declared in this scope because it would give a different meaning to 'Model', which is already used in a 'parent or current' scope to denote something else.

在循环中,当我使用 Model 以外的其他名称时,它工作正常。

查看 @model IEnumerable

@foreach (tbEmployee emp in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(Model => emp.empID)
            </td>
            <td>
                @Html.DisplayFor(Model  => emp.empName)
            </td>
            <td>
                @Html.DisplayFor(Model  => emp.empAge)
            </td>
            <td>
                @Html.DisplayFor(Model  => emp.empStatus)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", "Employee")
                @Html.ActionLink("Update", "Update", "Employee")
                @Html.ActionLink("Delete", "Delete", "Employee")
            </td>
        </tr>
    }

但是当我这样写的时候,它工作正常

 @foreach (tbEmployee emp in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(x => emp.empID) //where this x get data from
            </td>
            <td>
                @Html.DisplayFor(x => emp.empName)
            </td>
            <td>
                @Html.DisplayFor(x => emp.empAge)
            </td>
            <td>
                @Html.DisplayFor(x => emp.empStatus)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", "Employee")
                @Html.ActionLink("Update", "Update", "Employee")
                @Html.ActionLink("Delete", "Delete", "Employee")
            </td>
        </tr>
    }

首先,此错误消息已在更新的 C# 版本中删除;设计团队认为它造成的混乱多于避免的错误。

问题是名字Model在这里用来表示两件事:任何属性或变量用作foreach的集合,以及作为形式参数一个拉姆达。此外,这两种用法 重叠 。也就是说,在 foreach 中使用的 Model 直接在 之外 Model 作为形式在 foreach 中的用法.基本上这里的编译器是说 "you are creating a situation where you're possibly using the same name to mean two completely different things right next to each other",这是一个非常混乱和容易出错的情况。

(两个 lambda 并排 且形式参数的名称相同并不违法,因为它们不 重叠 。如果一个 lambda 在另一个中,这会产生类似的错误。)

此错误消息是出于好意,但遗憾的是,编译器未能向用户解释问题。我在...... 2011 年做了一些工作来改进该错误消息?或附近。但这些改进充其量只是微不足道的。

如您所见,正确的解决方法是停止在同一范围内使用相同的名称来表示两个完全不同的事物