C#在foreach中的语法不清楚

时间:2015-02-17 10:24:14

标签: c# list model-view-controller lambda

我在C#项目的脚手架视图中发现了这段代码,但我并不真正理解" List"之后的语法。部分。为什么在编写ViewBag.data之前声明价格清单?因为ViewBag.Data已经包含一个价格转换为列表的查询,所以我不明白为什么会发生这种情况

@foreach (var x in ((List<WebCashRegister.Models.BLModels.Price>)ViewBag.data).Where(x => x.ProductId == item.Id).OrderByDescending(x => x.StartDate).Take(1))

这是完整的查询,但我的问题只是关于这一部分:

List<WebCashRegister.Models.BLModels.Price>)ViewBag.data

这种语法是如何工作的?谢谢!

2 个答案:

答案 0 :(得分:5)

这告诉编译器,ViewBag.data可以是任何内容,因为您可以在ViewBag中放置任何内容,但类型为List<WebCashRegister.Models.BLModels.Price>

这是一个显式演员的例子:

List<object> myList = new List<object>();
MyAunt terry = new MyAunt();
myList.Add(terry);

现在,如果你有一个功能

public void Congratulate(MyAunt somebody)

然后你不能只是打电话

Congratulate(myList[0]);

因为编译器不知道它是正确的类型。所以你必须通过说

来帮助编译器
Congratulate((MyAunt) myList[0]);

答案 1 :(得分:1)

因为ViewBag被定义为dynamic。一旦需要将其视为List<Price>以执行某些LINQ操作,您必须将其明确地转换为适当的(原始)类型。

请参阅ViewBagdynamic