错误:无法在此范围内声明名为“模型”的局部变量

时间:2019-10-21 17:48:17

标签: c# asp.net-mvc-5.2

我正在重新创建视图列表。因此,该模型是IEnumerable的。它在foreach循环中可以很好地获取员工。但是当我在循环中使用此模型时,会给我错误:

  

不能在此范围内声明名为“ Model”的局部变量,因为它将赋予“ Model”不同的含义,“ Model”已在“父级或当前”范围中用于表示其他内容。

在循环中,当我使用除Model之外的其他名称时,效果很好。

查看 @model IEnumerable

import QtQuick 2.12
import QtQuick.Controls 2.12

ApplicationWindow {
    id: root
    width: 640
    height: 480
    visible: true

    Repeater{
        model: rectangle_manager.model

        Rectangle{
            x: model.x
            y: model.y
            rotation: model.angle
            width: 100
            height: 100
            color: Qt.rgba(Math.random(), Math.random(), Math.random(), 1)
        }
    }
}

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

@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>
    }

1 个答案:

答案 0 :(得分:4)

首先,此错误消息已在较新的C#版本中删除;设计团队决定,它造成的混乱比阻止错误的可能性更大。

问题在于,名称Model在这里用来表示两件事:将任何属性或变量用作foreach的集合,以及用作lambda的形式参数。此外,这两种用法重叠。也就是说,在Model中使用的foreach直接在Model的内部 之外。基本上,这里的编译器说的是“您正在创建一种可能使用相同名称来表示彼此相邻的两个完全不同的事物的情况”,这是一种非常容易混淆且容易出错的情况。

(在彼此之间有两个名称相同的lambda,它们的形式参数名称相同,这是非法的,因为它们不会重叠。如果一个lambda位于另一个lambda中,则给出类似的错误。)

此错误消息的意图很明确,但遗憾的是,编译器在向用户解释问题方面做得不好。我做了一些工作来改善2011年的错误消息?或附近。但是这些改进充其量是微不足道的。

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