首頁 > 後端開發 > C++ > 為什麼我不能在C#中將`列表'列為``列表''?

為什麼我不能在C#中將`列表'列為``列表''?

Susan Sarandon
發布: 2025-01-28 13:51:09
原創
771 人瀏覽過

Why Can't I Cast a `List` to a `List` in C#?

C# 類型轉換難題:為什麼 List<string> 不能轉換為 List<object>

在 C# 中,嘗試將 List<string> 對象賦值給 List<object> 變量會引發一個有趣的異常。這種轉換為何不被允許,一直困擾著許多開發者。

問題剖析

考慮以下代碼片段:

<code class="language-csharp">List<string> sl = new List<string>();
List<object> ol;
ol = sl; // 隐式转换不被允许
ol = (List<object>)sl; // 显式转换也失败</code>
登入後複製

隱式和顯式轉換嘗試均失敗,這讓我們不禁疑問原因所在。

根本原因

這種限制的主要原因在於列表內部可能出現不一致性。如果我們允許這種轉換,隨後又向列表中添加類型為 Foo 的對象,則字符串列表將變得不一致。

當迭代第一個列表引用時,我們會遇到類轉換異常,因為 Foo 實例無法轉換為字符串。維護類型一致性對於確保列表中數據的完整性至關重要。

反向轉換:更深入的探討

然而,關於反向轉換,一個有趣的問題出現了:

<code class="language-csharp">List<object> ol = new List<object>();
List<string> sl;
sl = (List<string>)ol;</code>
登入後複製

這種轉換是否允許?雖然它似乎可能有用,但允許這種轉換可能會引入運行時錯誤或不一致性。從更通用的類(object)到更具體的類(string)的轉換,任何添加到字符串列表中的對象可能與對象列表不兼容。

反向轉換在 C# 中能否成功?

目前尚不清楚這種反向轉換在 C# 中是否合法。如果合法,它將突出顯示隱式轉換和顯式轉換之間的區別,後者似乎違反了類型一致性規則。對此方面的進一步測試和澄清將非常有價值。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板