C# - 如何将 List 转换为列出,当 Dog 是 Animal 的子类时?
我有一个类 Animal
及其子类 Dog
。
我有一个 List
,我想将一些 List
的内容添加到 List
中。
除了将 List
转换为 List
,然后使用 AddRange
之外,还有更好的方法吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果使用 C#4,则不需要强制转换:
这是允许的,因为
AddRange()
接受IEnumerable
,即 协变。但是,如果您没有 C#4,则必须迭代
List
并转换每个项目,因为协方差只是在那时添加的。您可以通过.Cast
扩展方法来完成此操作:如果您甚至没有 C#3.5,则必须手动进行转换。
You don't need the cast if you're using C#4:
That's allowed, because
AddRange()
accepts anIEnumerable<T>
, which is covariant.If you don't have C#4, though, then you would have to iterate the
List<Dog>
and cast each item, since covariance was only added then. You can accomplish this via the.Cast<T>
extension method:If you don't even have C#3.5, then you'll have to do the casting manually.
我相信这取决于您使用的 .Net 版本。我可能错了,但在.Net 4中我认为你可以做
否则在.Net 3.5中,你可以做
I believe this depends on which version of .Net you're using. I could be mistaken, but in .Net 4 I think you can do
Otherwise in .Net 3.5, you can do
您可以使用
Cast; ()
编辑:正如 dlev 指出的那样,如果您运行框架 4,则不需要进行强制转换。
You can use
Cast<T> ()
EDIT : As dlev points out, if you run framework 4 you don't need to cast.