從派生類列表轉換為基類列表
面向對象編程中,繼承基類和接口是很常見的做法。然而,在處理集合時,我們遇到一個明顯的限制:為什麼不能使用與基類相同的類或接口來定義列表?
考慮以下示例:
<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中文網其他相關文章!