C# - 无法识别右括号
C# - Closing brackets aren't being recognized
我有一个看起来像这样的控制器方法
public ActionResult SpecialOrderSummary(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
JobOrder jobOrder = db.JobOrders.Find(id);
if (jobOrder == null)
{
return HttpNotFound();
}
ViewBag.JobOrderID = jobOrder.ID;
ItemInstance ii = db.ItemInstances.Where(x => x.serialNumber == jobOrder.serialNumber).FirstOrDefault();
Item item = db.Items.Find(ii.ItemID);
var vm = new ItemViewModel
{
ItemId = item.ItemID,
ItemName = item.Name,
Parts = new List<ItemPartViewModel>
{
foreach (ItemHasParts ihp in item.IHP)
{
Part part = db.Parts.Find(ihp.PartID);
new ItemPartViewModel
{
PartId = part.ID,
PartName = part.Name
};
}
} //this is closing method
}; // this is closing controller
return View(vm);
}
但是部件列表和 vm 的结束 }
没有结束右括号。相反,部件 }
正在关闭方法,而 vm }
正在关闭控制器。
为什么会这样?我的语法有问题吗?
不确定您在这里的目的是什么:
Parts = new List<ItemPartViewModel>
{
foreach
如果这是初始化 Parts 变量,它不能包含 foreach 循环
集合初始值设定项需要包含固定数量的元素。您可以使用变量和表达式,但必须有一定数量的变量和表达式:
var stringList = new List<string>() { "a", "b", "c", "d"+"e", person.Name };
编译器会将其转换为对 Add()
的一堆调用
如果您有一些可变数量的项目,您可以添加、添加范围或进行 LINQ 查询以形成您的列表:
foreach(var person in myPeople)
stringList.Add(person.Name);
//or
stringList.AddRange(myStringArray);
//or
stringList = people.Select(x => x.Name).ToList();
最后一个没有添加到现有列表;它正在用另一个列表替换整个列表。如果您想添加到现有的,您可以:
stringList.AddRange(people.Select(x => x.Name));
LINQ 查询的结果是一个可枚举的字符串列表
是的,在 Parts
列表初始化中不能有 foreach
循环。
你必须做的:
var vm = new ItemViewModel
{
ItemId = item.ItemID,
ItemName = item.Name,
Parts = new List<ItemPartViewModel>()
};
foreach (ItemHasParts ihp in item.IHP)
{
Part part = db.Parts.Find(ihp.PartID);
vm.Parts.Add(new ItemPartViewModel
{
PartId = part.ID,
PartName = part.Name
};
}
我很惊讶编译器居然让你编译?
我有一个看起来像这样的控制器方法
public ActionResult SpecialOrderSummary(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
JobOrder jobOrder = db.JobOrders.Find(id);
if (jobOrder == null)
{
return HttpNotFound();
}
ViewBag.JobOrderID = jobOrder.ID;
ItemInstance ii = db.ItemInstances.Where(x => x.serialNumber == jobOrder.serialNumber).FirstOrDefault();
Item item = db.Items.Find(ii.ItemID);
var vm = new ItemViewModel
{
ItemId = item.ItemID,
ItemName = item.Name,
Parts = new List<ItemPartViewModel>
{
foreach (ItemHasParts ihp in item.IHP)
{
Part part = db.Parts.Find(ihp.PartID);
new ItemPartViewModel
{
PartId = part.ID,
PartName = part.Name
};
}
} //this is closing method
}; // this is closing controller
return View(vm);
}
但是部件列表和 vm 的结束 }
没有结束右括号。相反,部件 }
正在关闭方法,而 vm }
正在关闭控制器。
为什么会这样?我的语法有问题吗?
不确定您在这里的目的是什么:
Parts = new List<ItemPartViewModel>
{
foreach
如果这是初始化 Parts 变量,它不能包含 foreach 循环
集合初始值设定项需要包含固定数量的元素。您可以使用变量和表达式,但必须有一定数量的变量和表达式:
var stringList = new List<string>() { "a", "b", "c", "d"+"e", person.Name };
编译器会将其转换为对 Add()
的一堆调用如果您有一些可变数量的项目,您可以添加、添加范围或进行 LINQ 查询以形成您的列表:
foreach(var person in myPeople)
stringList.Add(person.Name);
//or
stringList.AddRange(myStringArray);
//or
stringList = people.Select(x => x.Name).ToList();
最后一个没有添加到现有列表;它正在用另一个列表替换整个列表。如果您想添加到现有的,您可以:
stringList.AddRange(people.Select(x => x.Name));
LINQ 查询的结果是一个可枚举的字符串列表
是的,在 Parts
列表初始化中不能有 foreach
循环。
你必须做的:
var vm = new ItemViewModel
{
ItemId = item.ItemID,
ItemName = item.Name,
Parts = new List<ItemPartViewModel>()
};
foreach (ItemHasParts ihp in item.IHP)
{
Part part = db.Parts.Find(ihp.PartID);
vm.Parts.Add(new ItemPartViewModel
{
PartId = part.ID,
PartName = part.Name
};
}
我很惊讶编译器居然让你编译?