gpt4 book ai didi

c# - 无法将通用列表转换为自定义列表类型

转载 作者:太空狗 更新时间:2023-10-29 22:52:07 25 4
gpt4 key购买 nike

我有两个类:

public class MyClass
{
public int Foo { get; set; }
public string Bar { get; set; }
}

public class MyList : List<MyClass>
{
}

在其他代码中,我正在创建 MyClass 的实例对于数据库中的每条记录,我想将它们全部返回 MyList实例:

var records = _repository.GetRecords();
return (MyList) records.Select(x => x.ConvertTo<MyClass>()).ToList();

代码编译正常,但它抛出一个运行时 InvalidCastException :

Unable to cast object of type 'System.Collections.Generic.List`1[MyClass]' to type 'MyList'.

我不明白为什么会出现这个错误,因为 MyList List<MyClass> .

我发现了一些相关的问题,它们都在谈论协方差。 This question与我的问题最相似,但我不知道如何调整答案来解决我的问题。

我的问题:
我怎样才能建立一个 MyList数据库记录中的实例?

我正在使用 C# 和 .NET 4.0

最佳答案

每个 MyListList<MyClass> , 但不是每个 List<MyClass>MyList .例如,如果您在 MyList 上有自定义属性, Linq 的 ToList方法不会知道它。

您可以创建一个新的 MyList通过使用 List<T>复制构造函数:

return new MyList(records.Select(x => x.ConvertTo<MyClass>()).ToList());

编辑

正如@ekolis 敏锐地注意到的,您需要明确地“继承” List<T>复制构造函数:

public class MyList : List<MyClass>
{
public MyList(IEnumerable<MyClass> list)
: base(list)
{
}
}

我也会退后一步,看看您是否真的需要 MyList类,或者如果你可以只使用 List<MyClass> (或者甚至只是 IEnumerable<MyClass> )。

关于c# - 无法将通用列表转换为自定义列表类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16488128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com