c# - LINQ 查询 ToList() 转换为特定列表时无法转换对象子类
问题描述
我得到一个运行时异常,不知道为什么
无法将“System.Collections.Generic.List`1[Foo.ElementNameViewModel]”类型的对象转换为“Foo.ElementNameList”类型。
我的课程是
ElementNameList - 特定类型的列表
namespace Foo
{
public class ElementNameList : List<ElementNameViewModel> {}
}
ElementNameViewModel - 要在列表中的项目
namespace Foo
{
public class ElementNameViewModel
{
public string Symbol { get; set; }
public string Name { get; set; }
}
}
并且异常发生在控制器中
var elements = (ElementNameList) db.Elements
.Select(c => new ElementNameViewModel
{
Symbol = c.Symbol,
Name = c.Name
})
.OrderBy(e => e.Symbol)
.ToList();
如果未完成子类化 List,则不确定如何重构元素列表。
解决方案
ToList()
返回一个真实的System.Collections.Generic.List
实例,而不是你的ElementNameList
.
您可以投射ElementNameList
到IList<ElementNameViewModel>
或 到List<ElementNameViewModel>
,但不能相反。
原因是你ElementNameList
可能有一个没有的属性List<ElementNameViewModel>
。如果您在演员阵容后尝试访问该属性会发生什么?
public class ElementNameList : List<ElementNameViewModel> {
public int X { get; set; }
}
var list = new List<ElementNameViewModel>();
ElementNameList elementList = (ElementNameList) list;
int x = elementList.X; // List<ElementNameViewModel> doesn't have 'X' property, what would happen here?
推荐阅读
- python - Can I transform string to pyomo variable?
- python - Calculating column totals of an array - Python
- postgresql - psql:致命:用户 {user} 的密码验证失败
- azure - 我可以在 Azure VM 中运行 Virtualbox
- azure-devops - Webhook Payload explanation
- java - 如何从命令行为注释设置新值?
- php - Sort Array by Number and Boolean
- javascript - How can I add a specific object with javascript?
- azure - How to call an Azure Rest API from an Azure Web Application
- google-cloud-platform - Google Cloud API for user