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

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

Susan Sarandon
Susan Sarandon原创
2025-02-01 17:46:09480浏览

How Can I Convert a List of Derived Class Objects to a List of Base Class Objects in C#?

从派生类列表转换为基类列表

面向对象编程中,继承基类和接口是很常见的做法。然而,在处理集合时,我们遇到一个明显的限制:为什么不能使用与基类相同的类或接口来定义列表?

考虑以下示例:

<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>

尝试将 listOfA 实例化为 List<C> 会导致编译器错误。为了解决这个问题,我们需要找到一个解决方法。

解决方案:显式转换和 LINQ

一种方法是手动遍历列表并将每个元素转换为所需的基类型。这可以使用 ConvertAll 方法实现:

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

另一种使用 LINQ 的解决方案是使用 Cast 运算符转换整个列表:

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

通过使用这些技术,我们可以有效地将派生类的列表转换为其基类型的列表,从而在处理继承方案时具有更大的灵活性。

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

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