首頁 >後端開發 >C++ >如何在 C# 中將清單轉換為清單?

如何在 C# 中將清單轉換為清單?

DDD
DDD原創
2025-01-09 22:41:41393瀏覽

How Can I Cast a List to a List in C#?

在 C# 中將衍生類別清單轉換為基底類別清單

此範例示範了一個常見問題:將衍生類別物件清單(例如 List<Cat>)傳遞給需要基底類別物件清單(List<Animal>)的方法。 不允許直接賦值,因為基底類別參考不能直接指向派生類別物件。

問題:

嘗試將 List<Cat> 傳遞給帶有 List<Animal> 參數的方法會導致編譯器錯誤。

解:使用 IEnumerable 和協方差

此解利用了 C# 的通用協方差。 不要使用 List<Animal>,而是將方法參數類型變更為 IEnumerable<Animal>IEnumerable 是唯讀介面;這可以防止該方法修改原始集合,從而解決潛在的類型安全問題。

修改後的程式碼:

<code class="language-csharp">class Animal
{
    public virtual void Play(IEnumerable<Animal> animals) { }
}

class Cat : Animal
{
    public override void Play(IEnumerable<Animal> animals)
    {
        //Implementation
    }
}

class Program
{
    static void Main()
    {
        Cat myCat = new Cat();
        myCat.Play(new List<Cat>()); // This now compiles successfully
    }
}</code>

這是有效的,因為 List<Cat> 隱式轉換為 IEnumerable<Cat>,並且 IEnumerable<Cat>IEnumerable<Animal> 協變。 Play 方法現在可以安全地迭代集合,而無需嘗試修改它。 這種方法保持類型安全,同時允許靈活的方法參數化。

以上是如何在 C# 中將清單轉換為清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn