foreach 中的 C# 语法不明确
C# Unclear Syntax in foreach
我在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
这个语法是如何工作的?谢谢!
这告诉编译器 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]);
因为ViewBag
定义为dynamic
。一旦需要将其视为 List<Price>
以执行某些 LINQ 操作,您必须将其显式转换为适当的(原始)类型。
我在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
这个语法是如何工作的?谢谢!
这告诉编译器 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]);
因为ViewBag
定义为dynamic
。一旦需要将其视为 List<Price>
以执行某些 LINQ 操作,您必须将其显式转换为适当的(原始)类型。