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中文網其他相關文章!