C#在foreach中的语法不清楚

Mar*_*son 2 c# model-view-controller lambda list

我在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))
Run Code Online (Sandbox Code Playgroud)

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

List<WebCashRegister.Models.BLModels.Price>)ViewBag.data
Run Code Online (Sandbox Code Playgroud)

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

Roy*_*tus 5

这告诉编译器,ViewBag.data由于你可以把任何你想要的东西放在一个东西中,它可以是任何ViewBag类型的东西List<WebCashRegister.Models.BLModels.Price>.

这是一个显式强制转换的示例:

List<object> myList = new List<object>();
MyAunt terry = new MyAunt();
myList.Add(terry);
Run Code Online (Sandbox Code Playgroud)

现在,如果你有一个功能

public void Congratulate(MyAunt somebody)
Run Code Online (Sandbox Code Playgroud)

那么你不能只是打电话

Congratulate(myList[0]);
Run Code Online (Sandbox Code Playgroud)

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

Congratulate((MyAunt) myList[0]);
Run Code Online (Sandbox Code Playgroud)

  • Riiiiight ...非常有理由拒绝给出有用的答案. (2认同)