myList'不能在此范围内声明

本文关键字:范围内 声明 不能 myList | 更新日期: 2023-09-27 18:13:09

谁能解释给我知道这个错误是什么,为什么我得到它?我试图改变名称f变量,但它没有工作。

public ActionResult Index(string SortOrder, string CurrentFilter, string SearchString, int? page)
{
    ViewBag.CurrentSort = SortOrder;
    ViewBag.NameSortParm = string.IsNullOrEmpty(SortOrder) ? "Tillverkning desc" : "";
    ViewBag.DateSortParm = SortOrder == "HireDate" ? "HireDatedesc" : "HireDate";
    conn.Open();
    ProductionOrderList myList = new  ProductionOrderList();
    myList = ProductionOrderReg.GetProductionOrders(conn, new Guid("288937bcc-6uif-485a-anm9-fadfq1234039d"));
    if (!string.IsNullOrEmpty(SearchString))
    {     
        // here on myList get red line     
        myList = myList.Where( myList => myList .ProductionOrderNo.ToUpper().Contains(SearchString.ToUpper()));
    }
}

myList'不能在此范围内声明

这是因为c#支持闭包。编译器会报错,因为lambda参数myList必须与外部作用域中的任何变量具有不同的名称。

试试这个:

myList = myList.Where(x => x.ProductionOrderNo.ToUpper().Contains(SearchString.ToUpper()));

参见Lambda表达式(c#编程指南)


下一个问题是myListProductionOrderList类型,而Where返回IEnumerable<T>。除非您需要使用自定义集合类型,否则我不会使用它。试试这个:

 IEnumerable<tionOrderItem> myList = ProductionOrderReg.GetProductionOrders(...);
 if (!string.IsNullOrEmpty(SearchString))
 {     
      // here on myList get red line     
      myList = myList.Where(x => x .ProductionOrderNo.ToUpper().Contains(SearchString.ToUpper()));
 }
 ...

或者,您确实必须使用ProductionOrderList的实例,确保您有一个接受IEnumerable<T>的构造函数,并使用:

 ProductionOrderList myList = ProductionOrderReg.GetProductionOrders(...);
 if (!string.IsNullOrEmpty(SearchString))
 {     
      // here on myList get red line     
      myList = new ProductionOrderList(
          myList.Where(x => x .ProductionOrderNo.ToUpper().Contains(SearchString.ToUpper())));
 }

将代码改为

myList = myList.Where( item => item .ProductionOrderNo.ToUpper().Contains(SearchString.ToUpper()));