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

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-02-01 17:41:101071浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn