c# - 当 LINQ 查询 ToList() 转换为特定的 List<T> 子类时无法转换对象

标签 c#

我收到一个运行时异常并且无法弄清楚原因

Unable to cast object of type 'System.Collections.Generic.List`1[Foo.ElementNameViewModel]' to type '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; }
    }
}

异常发生在 Controller 中

var elements = (ElementNameList) db.Elements
            .Select(c => new ElementNameViewModel
            {
                Symbol = c.Symbol,
                Name = c.Name
            })
            .OrderBy(e => e.Symbol)
            .ToList();

如果未完成子类化列表,我不确定应该如何重构元素列表。

最佳答案

ToList()返回一个真实的 System.Collections.Generic.List例如,不是你的 ElementNameList .

你可以投ElementNameListIList<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?

关于c# - 当 LINQ 查询 ToList() 转换为特定的 List<T> 子类时无法转换对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52634620/

相关文章:

c# - 0x800a1391 - JavaScript 运行时错误 : 'PageMethods' is undefined

c# - 如何在 Asp.Net MVC 2 中通过 JQuery 调用重载的 C# 函数

C# 将字符串转换为对象

c# - 保存文件时出现 UnauthorizedAccessException

c# - 将具体类转换为通用基接口(interface)

c# - 在 try catch block 中对 IDisposable 使用 block 是否有任何问题?

c# - C# 中的新类型,带有设计时检查

c# - EPPlus - 创建和验证数字签名

c# - 我应该如何在 nuget 包中包含与 MVC 相关的 namespace ?

c# - 在一个对象中创建一类对象