从派生类列表转换为基类列表
面向对象编程中,继承基类和接口是很常见的做法。然而,在处理集合时,我们遇到一个明显的限制:为什么不能使用与基类相同的类或接口来定义列表?
考虑以下示例:
<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中文网其他相关文章!