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