首页 > 后端开发 > C++ > 如何将派生类的列表转换为C#中的基类列表?

如何将派生类的列表转换为C#中的基类列表?

Mary-Kate Olsen
发布: 2025-02-01 17:41:10
原创
999 人浏览过

How to Convert a List of Derived Classes to a List of Base Classes in C#?

C#中将派生类列表转换为基类列表

继承机制允许我们基于现有类创建新类,但同样的概念并不直接适用于泛型列表。具体来说,我们不能声明一个List<基类>并为其赋值一个派生类型列表,即使派生类继承自基类。请考虑以下示例:

<code class="language-csharp">interface A { }

class B : A { }

class C : B { }

class Test
{
    static void Main(string[] args)
    {
        A a = new C(); // 正确
        List<A> listOfA = new List<C>(); // 编译错误
    }
}</code>
登录后复制

这段代码在编译时失败,因为编译器期望的是一个A对象的列表,而不是C对象的列表。为了解决这个问题,我们需要将派生对象的列表转换为基对象的列表。

转换方法

List<派生类>转换为List<基类>的方法是迭代列表元素并手动强制转换它们。这可以使用ConvertAll方法实现:

<code class="language-csharp">List<A> listOfA = new List<C>().ConvertAll(x => (A)x);</code>
登录后复制

在这里,我们迭代C列表中的每个元素,将其转换为A类型,并将其添加到新的listOfA列表中。

使用LINQ的替代方法

或者,我们可以使用LINQ来执行转换:

<code class="language-csharp">List<A> listOfA = new List<C>().Cast<A>().ToList();</code>
登录后复制

在这里,Cast<A>将列表中的每个元素转换为A类型,而ToList()则创建一个包含已转换元素的新列表。

以上是如何将派生类的列表转换为C#中的基类列表?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板