【问题标题】:Cast List<B> to List<A>将列表<B> 转换为列表<A>
【发布时间】:2015-10-22 09:48:31
【问题描述】:

我想将对象类型 A 的列表转换为对象类型 B 的列表,其中 A 继承 B。

具体来说:

public class A : B
{
    public string name { get; set; }
}

public class B
{
    public B() { }
}

我解析了一个 JSON 字符串,并将其转换为我的 A 类型列表:

B elem = ((JArray)_configuration).ToObject<List<A>>();

我有这个错误:

无法将类型“System.Collections.Generic.List”隐式转换为 'System.Collections.Generic.List'

我试着投射它:

List<B> elem = (List<B>)((JArray)_configuration).ToObject<List<A>>();

但出现此错误:

无法将类型“System.Collections.Generic.List”转换为 'System.Collections.Generic.List'

我找不到帮助,也许是因为我不知道要寻找什么,所以如果已经在某个地方得到了回答,请道歉!

【问题讨论】:

标签: c# list generics


【解决方案1】:

您可以为此使用Enumerable.Cast&lt;&gt;()

List<B> list = myList.Cast<B>().ToList();

但是ToList() 会创建一个副本。如果您只想迭代项目。不要使用ToList() 并将其作为IEnumerable&lt;B&gt; 处理。它将被“即时”转换成懒惰的

【讨论】:

  • 谢谢,我认为这个解决方案比我找到的那个更好
【解决方案2】:

好的,如果有帮助的话,刚刚找到答案。如果没有,请告诉我,我将删除该问题。对不起!

只需要做:

List<B> elem = new List<B>(((JArray)_configuration).ToObject<List<A>>());

【讨论】:

  • 没有必要删除你的问题,相反,你应该等待几天并接受你自己的答案。
  • 你也可以做 List elem=>(((JArray)_configuration).ToObject>().Cast().ToList()
【解决方案3】:

也许你应该阅读this,使用list.selectall。

你也可以试试this for arrays

【讨论】:

    猜你喜欢
    • 2012-11-12
    • 2020-07-08
    • 1970-01-01
    • 2018-09-14
    • 2020-07-15
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    相关资源
    最近更新 更多