<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 泛型的優點(C# 編程指南) 在公共語言運行時和 C# 語言的早期版本中,通用化是通過在類型與通用基類型 [Object](https://msdn.microsoft.com/zh-cn/library/system.object.aspx) 之間進行強制轉換來實現的,泛型提供了針對這種限制的解決方案。通過創建泛型類,您可以創建一個在編譯時類型安全的集合。 使用非泛型集合類的限制可以通過編寫一小段程序來演示,該程序使用 .NET Framework 類庫中的 [ArrayList](https://msdn.microsoft.com/zh-cn/library/system.collections.arraylist.aspx) 集合類。 [ArrayList](https://msdn.microsoft.com/zh-cn/library/system.collections.arraylist.aspx) 是一個使用起來非常方便的集合類,無需進行修改即可用來存儲任何引用或值類型。 ``` // The .NET Framework 1.1 way to create a list: System.Collections.ArrayList list1 = new System.Collections.ArrayList(); list1.Add(3); list1.Add(105); System.Collections.ArrayList list2 = new System.Collections.ArrayList(); list2.Add("It is raining in Redmond."); list2.Add("It is snowing in the mountains."); ``` 但這種方便是需要付出代價的。添加到 [ArrayList](https://msdn.microsoft.com/zh-cn/library/system.collections.arraylist.aspx) 中的任何引用或值類型都將隱式地向上強制轉換為 [Object](https://msdn.microsoft.com/zh-cn/library/system.object.aspx)。如果項是值類型,則必須在將其添加到列表中時進行裝箱操作,在檢索時進行取消裝箱操作。強制轉換以及裝箱和取消裝箱操作都會降低性能;在必須對大型集合進行循環訪問的情況下,裝箱和取消裝箱的影響非常明顯。 另一個限制是缺少編譯時類型檢查;因為 [ArrayList](https://msdn.microsoft.com/zh-cn/library/system.collections.arraylist.aspx) 會將所有項都強制轉換為 [Object](https://msdn.microsoft.com/zh-cn/library/system.object.aspx),所以在編譯時無法防止客戶端代碼執行類似如下的操作: ``` System.Collections.ArrayList list = new System.Collections.ArrayList(); // Add an integer to the list. list.Add(3); // Add a string to the list. This will compile, but may cause an error later. list.Add("It is raining in Redmond."); int t = 0; // This causes an InvalidCastException to be returned. foreach (int x in list) { t += x; } ``` 盡管將字符串和 **ints** 組合在一個 [ArrayList](https://msdn.microsoft.com/zh-cn/library/system.collections.arraylist.aspx) 中的做法在創建異類集合時是完全可接受的,并且有時需要有意為之,但這種做法很可能產生編程錯誤,并且直到運行時才能檢測到此錯誤。 在 C# 語言的 1.0 和 1.1 版本中,只能通過編寫自己的特定于類型的集合來避免 .NET Framework 基類庫集合類中的通用代碼的危險。當然,由于此類不可對多個數據類型重用,因此將喪失通用化的優點,并且您必須對要存儲的每個類型重新編寫該類。 [ArrayList](https://msdn.microsoft.com/zh-cn/library/system.collections.arraylist.aspx) 和其他相似類真正需要的是:客戶端代碼基于每個實例指定這些類要使用的具體數據類型的方式。這樣將不再需要向上強制轉換為 **T:System.Object**,同時,也使得編譯器可以進行類型檢查。換句話說,[ArrayList](https://msdn.microsoft.com/zh-cn/library/system.collections.arraylist.aspx) 需要一個類型參數。這正是泛型所能提供的。在 **N:System.Collections.Generic** 命名空間的泛型 [List&lt;T&gt;](https://msdn.microsoft.com/zh-cn/library/6sh2ey19.aspx) 集合中,向集合添加項的操作類似于以下形式: ``` // The .NET Framework 2.0 way to create a list List<int> list1 = new List<int>(); // No boxing, no casting: list1.Add(3); // Compile-time error: // list1.Add("It is raining in Redmond."); ``` 對于客戶端代碼,與 [ArrayList](https://msdn.microsoft.com/zh-cn/library/system.collections.arraylist.aspx) 相比,使用 [List&lt;T&gt;](https://msdn.microsoft.com/zh-cn/library/6sh2ey19.aspx) 時添加的唯一語法是聲明和實例化中的類型參數。雖然這種方式稍微增加了編碼的復雜性,但好處是您可以創建一個比 [ArrayList](https://msdn.microsoft.com/zh-cn/library/system.collections.arraylist.aspx) 更安全并且速度更快的列表,對于列表項是值類型的情況尤為如此。 ## 請參閱 [System.Collections.Generic](https://msdn.microsoft.com/zh-cn/library/system.collections.generic.aspx) [C# 編程指南](https://msdn.microsoft.com/zh-cn/library/67ef8sbd.aspx) [泛型介紹(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/0x6a29h6.aspx) [裝箱和取消裝箱(C# 編程指南)](https://msdn.microsoft.com/zh-cn/library/yz2be5wk.aspx) [Collections Best Practices(有關集合的最佳做法)](http://go.microsoft.com/fwlink/?LinkId=112403)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看