首頁 >後端開發 >C++ >為什麼我不能將列表分配給C#2.0中的列表?

為什麼我不能將列表分配給C#2.0中的列表?

Linda Hamilton
Linda Hamilton原創
2025-02-02 05:21:09673瀏覽

Why Can't I Assign List to List in C# 2.0?

C# 2.0中的泛型列表賦值限制:List 無法直接賦值給 List

C#中的方差特性指的是類型參與協變或逆變賦值的能力。然而,在C# 2.0中嘗試將List賦值給List會面臨一些限制,這可能導致不安全的方差:

<code class="language-csharp">List<动物> animalsList = new List<长颈鹿>();</code>

即使顯式轉換也會失敗,這凸顯了方差問題。需要明確的是,這不是協變問題,協變問題會在以後的C#版本中解決。事實上,為了確保編譯時類型安全,這種賦值是被明確禁止的。

方差潛在的風險可以通過以下示例來說明:

<code class="language-csharp">List<长颈鹿> giraffes = new List<长颈鹿>();
giraffes.Add(new 长颈鹿());
List<动物> animals = giraffes;
animals.Add(new 狮子());</code>

這段代碼看似無害,但可能導致意外行為和數據損壞。將派生類型(獅子)賦值給基類型(動物)允許違反類型安全規則。

儘管數組支持運行時檢查的引用類型方差,但泛型旨在實現編譯時類型安全。

在C# 4中引入了安全的方差支持,但僅限於接口和委託。協變允許用於Func和IEnumerable,而逆變允許用於Action

對於C# 2.0的解決方法,建議使用List.ConvertAll創建新的列表,而不是嘗試修改原始列表。

以上是為什麼我不能將列表分配給C#2.0中的列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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