欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
最佳實(shí)踐集合(轉 MSDN)
部分計算機科學(xué)和編程的入門(mén)課本中都會(huì )有一章介紹集合。它們可能被稱(chēng)為數組或數據結構,但概念是相同的。將正式數據對象中的一組元素與另一組元素聯(lián)系在一起的能力對現代編程技術(shù)來(lái)說(shuō)是必需的。
 
在 Microsoft® .NET Framework 中,付出的很多努力都是為了創(chuàng )建強大的集合類(lèi),以滿(mǎn)足各種需求及樣式。這些集合使用方便、直觀(guān),并有足夠的性能,這些都是非常重要的特征。在本月的這一期內容中,我將著(zhù)眼于 .NET 中的集合、它們的工作原理、使用它們的時(shí)機和一些最佳實(shí)踐。
使用集合的時(shí)機
開(kāi)發(fā)人員面對的第一個(gè)決定好像相當簡(jiǎn)單:我是否該使用集合?有時(shí)答案會(huì )顯而易見(jiàn)。有時(shí)候就是個(gè)人喜好問(wèn)題。集合的基本用途是將某些對象聯(lián)系起來(lái)構成一個(gè)組,因為它們彼此間有著(zhù)某種邏輯關(guān)系。例如,您可以有一個(gè)代表書(shū)籍的 Book 類(lèi),也可以有一個(gè)代表圖書(shū)館或圖書(shū)館中一書(shū)架書(shū)的 BookCollection 類(lèi)。在這中情況下使用集合,可以在書(shū)架中快速添加或刪除書(shū)籍、移動(dòng)書(shū)籍、根據標題或 ISBN 或某些其他描述性數據查找書(shū)籍、統計書(shū)籍數量、遍歷書(shū)籍等。隨后我將就此詳細介紹,但在這種情況下使用集合是顯而易見(jiàn)的選擇。
現在,讓我們看一看您幾乎不會(huì )選擇使用集合的情形££有理數的情況。有理數是能表示為兩個(gè)整數之比的數。在集合描述中,我提出集合應該與一組元素結合使用,這樣您就可以使用有兩個(gè)元素的集合,一個(gè)用做分子,另一個(gè)用作分母。但是,分子和分母的用途完全不同(與所有元素都用于相似目的的書(shū)籍示例不同)。在集合中存儲項目的一個(gè)主要原因是可以輕松遍歷所有元素,因此可以對每個(gè)元素進(jìn)行操作,而對組成有理數的整數來(lái)說(shuō)這項任務(wù)幾乎沒(méi)有意義。另外,有理數的元素數量固定,而且非常少。因此,用集合存儲有理數的元素沒(méi)有任何意義;這里您應該使用兩個(gè)單獨的整數字段。
現在,請設想一個(gè)可能有必要討論使用集合的情形。假設一個(gè)用于描述某個(gè)體育賽事(如棒球比賽)參賽隊的數據結構。在比賽中需要對每個(gè)參賽隊執行操作,而且每個(gè)隊都有相似的目標(與有理數中的分子和分母不同)。但是,在類(lèi)似棒球這樣的比賽中,只有兩個(gè)隊參賽,因此雖然循環(huán)支持可能有用,但要枚舉的項目數量卻非常少(原型實(shí)現中數量是固定的)。有些人可能選擇使用 TeamCollection 或 Team 實(shí)例數組描述參賽雙方,另外一些人可能選擇使用兩個(gè)單獨的 Team 字段。兩種實(shí)現各有其優(yōu)缺點(diǎn)。
然而,考慮使用集合時(shí)應牢記一些簡(jiǎn)單的指導方針。當以下陳述至少有一個(gè)為真時(shí),則應該使用集合:
各個(gè)元素具有相似的用途和同樣的重要性。 元素的數量未知,或者沒(méi)有在編譯時(shí)固定。 需要支持對所有元素的遍歷。 需要支持對元素的排序。 需要公開(kāi)某個(gè)庫的元素,并且預期用戶(hù)在此使用集合類(lèi)型。
 
注意,出于本欄目之目的,我認為數組 (System.Array) 將成為一種特殊類(lèi)型的集合。
創(chuàng )建自定義集合的時(shí)機
.NET Framework 包含多種集合類(lèi)型,其中最常見(jiàn)的類(lèi)型在 System.Collections 命名空間和子命名空間下(System.Array 除外)。我強烈建議在了解可用的集合后再編寫(xiě)自定義集合,因為現有的類(lèi)型可以滿(mǎn)足您對集合的絕大部分需求。
您可能需要創(chuàng )建自定義集合的情況是您在嘗試實(shí)現 Framework 中尚不存在的特殊數據結構。腦海中出現的圖形、樹(shù)和其他特殊數據結構。許多情況下它們會(huì )非常有用。如果需要現有集合類(lèi)型的一個(gè)變體,則必須創(chuàng )建一個(gè)自定義集合。您可能需要集合只承載某些類(lèi)型,并且此集合的特定實(shí)現取決于這些類(lèi)型。您可能出于性能考慮而需要自定義集合;如果通用集合無(wú)法滿(mǎn)足您的特殊性能需求,編寫(xiě)自定義集合可能是您的唯一選擇。例如,您可能需要一個(gè)能在其中快速插入項目的列表,同時(shí)也可以快速查找項目而不必遍歷該列表。
現有的集合
如果您使用現有的集合,則仍需要選擇合適的集合。根據構建的內容不同,您可以從各種不同的集合中作出選擇。首先,您需要確定集合中要存儲什么,然后決定要如何使用集合。是否會(huì )一次性添加所有元素?是否會(huì )動(dòng)態(tài)添加和刪除元素?是否只需要遍歷整個(gè)集合,或者還需要查找和使用特定元素?是否通過(guò)某個(gè)公共 API 公開(kāi)集合?應用程序的性能特征和要求是什么?詢(xún)問(wèn)這些問(wèn)題有助于您決定使用哪個(gè)集合,如果這些選項無(wú)法滿(mǎn)足您的需求,可以考慮擴展集合而不是從頭開(kāi)始。
泛型或非泛型
.NET Framework 2.0 引入了泛型概念。在 .NET Framework 1.x 中,大多數集合類(lèi)都存儲 System.Object 引用。這意味著(zhù)每次從集合中提取項目時(shí)都必須將其轉換回原來(lái)的類(lèi)型(如果您建了庫,那么庫的使用者需要知道這些都是什么類(lèi)型)。這個(gè)轉換對性能有影響,尤其在存儲值類(lèi)型時(shí),因為將值添加到集合時(shí)首先需要將值封裝到 System.Object 中,以后在從集合中取出值并轉換回原來(lái)的類(lèi)型時(shí)需要取消封裝。
通過(guò)使用泛型集合類(lèi)型(可在 System.Collections.Generic 命名空間下找到),可以避免這些問(wèn)題。例如,如果您的 C# 應用程序中需要一個(gè)字符串列表,則可以使用 System.Collections.Generic.List<String>(Visual Basic® 中為 List(Of String),C++ 中為 <String^>)。這樣可以確保提取元素時(shí),它們只進(jìn)入 System.String 類(lèi)型(意味著(zhù)您不需要從 Object 轉換到 String)。如果嘗試在列表中存儲其他內容,也可以通過(guò)提供編譯時(shí)錯誤使編譯器強制該行為。另外,如果您正在開(kāi)發(fā)供其他人使用的庫,并且不知道他們要使用什么內含類(lèi)型,則可以繼續使用庫用戶(hù)隨后將定義的泛型 T。您也可以限制該 T 類(lèi)型,以便對即將使用的類(lèi)型有些了解(它們從一組特定的接口派生而來(lái),它們實(shí)現無(wú)參數的構造函數,等等)。
如果您現在或將來(lái)使用 .NET Framework 2.0,非常不鼓勵使用舊的非泛型集合。需要保存它們的唯一原因可能是作為遺產(chǎn),或者您的代碼需要與舊版的 Framework 配合使用。使用舊的非泛型集合會(huì )降低代碼速度,也會(huì )降低它的可讀性。即使需要在一個(gè)集合中存儲多個(gè)類(lèi)型,仍可使用泛型集合。您只需要為要存儲的對象找到一個(gè)常用的基本類(lèi)型;最不濟也可以將 System.Object 用作泛型參數以便存儲任何內容(如 List<Object>),因為每個(gè)類(lèi)型都是從 System.Object 派生而來(lái)。
如果有使用非泛型集合的舊代碼,強烈建議您考慮更改代碼以便使用泛型集合。圖 1 中的表顯示了建議的類(lèi)型和應使用的接口。此外,.NET Framework 2.0 還包含了在 .NET Framework 1.x 中沒(méi)有直接對應項的新泛型集合,例如,LinkedList<T> 和 SortedDictionary<TKey, TValue>。.NET Framework 3.5 還包含一個(gè) HashSet<T> 類(lèi),提供新的標準集功能(先前的版本中,通??衫?Hashtable 或 Dictionary<TKey,TValue> 來(lái)滿(mǎn)足對集的需求)。
性能方面的含義
需要集合的設計通常是因為需要使用大量的項目,而您使用的項目數量會(huì )影響應用程序的性能。要確保選擇了正確的集合類(lèi)型,重要的是了解預期的集合使用模式。例如,您可能只在初始化應用程序時(shí)在集合中插入項目,或者在程序的整個(gè)生命周期中您都可能插入項目。您與集合的唯一交互可能是遍歷所有元素,或者您可能需要隨機訪(fǎng)問(wèn)功能。了解使用配置文件有助于找到符合需求的最佳集合。
如果需要非??斓靥砑?、刪除和查找項目,而且不關(guān)心集合中項目的順序,那么首先應該考慮使用 System.Collections.Generic.Dictionary<TKey, TValue>(或者您正在使用 .NET Framework 1.x,可以考慮 Hashtable)。三個(gè)基本操作(添加、刪除和包含)都可快速操作,即使集合包含上百萬(wàn)的項目。另一方面,利用 List<T>(或 .NET Framework 1.x 中的 ArrayList)插入和刪除項目所需的時(shí)間都可能有所不同。(List<T> 和 ArrayList 都在基礎數組中存儲項目,并保持順序。添加項目可能需要移動(dòng)基礎數組中現有的項目以騰出空間。在末尾添加項目不需要進(jìn)行任何移動(dòng),而且速度非??欤?。
如果您的使用模式很少需要刪除和大量添加,而重要的是保持集合的順序,那么您仍然可以選擇 List<T>。雖然查找速度可能比較慢(因為在搜索目標項目時(shí)需要遍歷基礎數組),但可以保證集合會(huì )保持特定的順序。另外,您可以選擇 Queue<T> 實(shí)現先進(jìn)先出 (FIFO) 順序或 Stack<T> 實(shí)現后進(jìn)先出 (LIFO) 順序。雖然 Queue<T> 和 Stack<T> 都支持枚舉集合中的所有項目,但前者只支持在末尾插入和從開(kāi)頭刪除,而后者只支持從開(kāi)頭插入和刪除。
如果需要在實(shí)現快速插入的同時(shí)保持順序,那么使用新的 LinkedList<T> 集合可幫助您提高性能。與 List<T> 不同,LinkedList<T> 是作為動(dòng)態(tài)分配的對象鏈實(shí)現。與 List<T> 相比,在集合中間插入對象只需要更新兩個(gè)連接和添加新項目。從性能的角度來(lái)看,鏈接列表的缺點(diǎn)是垃圾收集器會(huì )增加其活動(dòng),因為它必須遍歷整個(gè)列表以確保沒(méi)有對象沒(méi)有被釋放。另外,由于每個(gè)節點(diǎn)相關(guān)的開(kāi)銷(xiāo)以及每個(gè)節點(diǎn)在內存中的位置等原因,大的鏈接列表可能會(huì )出現性能問(wèn)題。雖然將項目插入到 LinkedList<T> 的實(shí)際操作比在 List<T> 中插入要快得多,但是找到要插入新值的特定位置仍需遍歷列表并找到正確的位置。
如前所述,Dictionary<TKey, TValue> 可能最適用于快速插入和查找項目。但是,較快的查找速度只是針對普通情況而言,某些數據集可能導致性能急劇下降。SortedDictionary<TKey,TValue> 是一個(gè)不同的實(shí)現,它用平衡樹(shù)實(shí)現作為基礎數據存儲;這相對提高了查找速度并保持項目的排列順序,但插入很有可能會(huì )慢一些(隨集合中的項目數量不同而有所差異)?;蛘咭部梢杂?SortedList<Tkey,TValue>,它使用兩個(gè)獨立的數組分別保存鍵和值,并保持兩者的順序(最壞的情況是必須移動(dòng)所有鍵和值)。
使用 List<T> 的天氣年鑒
以下示例是一個(gè)簡(jiǎn)單的應用程序,計算各城市天氣預報列表的平均溫度和濕度(請參見(jiàn)圖 2)。WeatherReport 類(lèi)用于存儲所選城市的單個(gè)天氣事件。List<WeatherReport> 集合用于存儲求平均值的信息。我在這個(gè)案例中選擇了 List<T> 集合,因為我的使用模式是只添加項目,而不是刪除項目。另外,我不關(guān)心排序或在中間插入項目,也不關(guān)心在列表中查找單個(gè)項目。我對列表做的唯一其他操作是遍歷項目。您可以選擇將此程序擴展為找到最熱或最冷的城市,以及增加許多天氣年鑒類(lèi)型操作。
自定義集合
某些情況下,您可能發(fā)現 Framework 中任何現有的集合類(lèi)型都無(wú)法滿(mǎn)足您的全部要求??赡苣歇毺氐囊?,或者仍在使用經(jīng)過(guò)很少改動(dòng)的現有集合。如果決定要編寫(xiě)自定義集合,首先要考慮擴展現有的集合類(lèi)型。
通過(guò)查看 System.Collections.ObjectModel 命名空間開(kāi)始。這些集合已經(jīng)實(shí)現了最需要的接口,并為您提供了需要的基本功能。您可以輕易地為繼承的類(lèi)添加方法,從而滿(mǎn)足您的特定需求。
例如,假設您需要實(shí)現一個(gè)簡(jiǎn)單的 System.Double 值集合,但還希望支持使用 Double.TryParse 的 Add(string) 方法,只在將值成功解析為 Double 后才添加結果。System.Collections.ObjectModel.Collection<T> 類(lèi)實(shí)現了所有的標準集合接口,為了提供附加的 Add 重載,您的自定義集合類(lèi)型從 Collection<Double> 派生即可。
class DoubleCollection : Collection<double>{public void Add(string st){Double d;if (Double.TryParse(st, out d)) base.Add(d);else throw new ArgumentException(“Cannot parse string to a double. “ +“Item was not added to collection.”);}}
 
隨著(zhù)擴展方法的引入,.NET Framework 3.5 可以提供額外的機制來(lái)創(chuàng )建擴展現有類(lèi)型的方法。例如,您可以在 C# 3.0 中重新編寫(xiě)此方法作為擴展方法,如下所示:
class CollectionExtensions{public static void Add(this Collection<Double> c, string st){Double d;if (Double.TryParse(st, out d)) c.Add(d);else throw new ArgumentException(“Cannot parse string to a double. “ +“Item was not added to collection.”);}}
 
如果一個(gè) Collection<Double> 有命名的值,則此靜態(tài)方法可通過(guò)傳統語(yǔ)法將新值添加到集合中。
CollectionExtensions.Add(values, “3.14”);
 
但是,因為這是一個(gè)擴展方法(顯然“this”關(guān)鍵字將第一個(gè)參數歸為靜態(tài) Add 方法),您可以按如下所示重新編寫(xiě):
values.Add(“3.14”);
 
如果用新類(lèi)型擴展了 Collection<Double>,那么您會(huì )編寫(xiě)完全相同的方法調用,但您現在可以將此新 Add 方法與任何 Collection<Double> 實(shí)例(或其派生的任何類(lèi)型)配合使用,而不只是與自定義類(lèi)型一起使用?;蛘吣梢蚤_(kāi)始構建自己的集合,不需要繼承任何現有的集合。這種情況下,您可以利用 .NET Framework 中提供的適當接口。
實(shí)現集合接口
如果您真的決定從頭開(kāi)始編寫(xiě)自己的自定義集合,則應實(shí)現 .NET Framework 提供的所有適當接口。這些接口公開(kāi)了與集合交互的常見(jiàn)方式,大多數人都認為非常直觀(guān)和易于使用。下面是可供選擇的各種接口的簡(jiǎn)短概述。
IEnumerable  該接口允許通過(guò)返回集合枚舉器來(lái)枚舉集合。該接口公開(kāi)可返回 IEnumerator 對象的單一方法 GetEnumerator。IEnumerator 對象用于快速遍歷整個(gè)集合。實(shí)現了此接口的任何集合都可以通過(guò) C# 中的 foreach 語(yǔ)言結構(在 Visual Basic 中是 For Each)進(jìn)行訪(fǎng)問(wèn)。
IEnumerable<T>  此接口通過(guò)附加的 GetEnumerator 方法擴展了非泛型 IEnumerable,該方法返回 IEnumerator<T> 而不是 IEnumerator。這意味著(zhù)如果計劃實(shí)現 IEnumerable<T>,則還必須實(shí)現 IEnumerable。不同之處是此附加的 GetEnumerator 返回泛型版本的 IEnumerator (IEnumerator<T>) 而不是非泛型版本。這是一個(gè)常見(jiàn)的做法,首先在 IEnumerable<T> 中提供集合的枚舉邏輯,然后使非泛型 GetEnumerator 方法委托到泛型 GetEnumerator 方法以確保兩者都返回相同的枚舉器(從而不需要再一次實(shí)現同一邏輯)。
IEnumerator  此接口通常不由集合自身實(shí)現。我在此提到它是因為它是一個(gè)有用的接口,在構建自定義集合時(shí)應牢記。此接口用于枚舉集合中的項目。它公開(kāi)三個(gè)方法:Reset、Current 和 MoveNext。Reset 方法用于初始化枚舉。Current 方法用于獲取當前的項目,MoveNext 用于移至下一個(gè)項目。如果能用 GetEnumerator 為集合獲取一個(gè)枚舉器,則可以實(shí)現 foreach 循環(huán)。例如,如果 Words 是一個(gè)字符串 ArrayList,那么以下代碼將得到相同結果:
foreach (string word in Words) Console.WriteLine (word);
 
IEnumerator enumerator = Words.GetEnumerator();while(enumerator.MoveNext())Console.WriteLine(enumerator.Current);
 
IEnumerator <T>  泛型版本的 IEnumerator 接口通過(guò)添加返回 T 的 Current 屬性重載擴展了非泛型版本。此重載無(wú)需進(jìn)行轉換,從而使枚舉集合更簡(jiǎn)單。
ICollection  此接口是 IEnumerable 的擴展。它還公開(kāi)三個(gè)附加的屬性和一個(gè)附加的方法:Count 是一個(gè)只讀屬性,可返回集合中的元素數量;IsSynchronized 指出該集合對線(xiàn)程安全,因此可以在多線(xiàn)程應用程序中使用它;SyncRoot 使實(shí)現人員能夠實(shí)現對線(xiàn)程安全的集合(通過(guò)提供用于該目的的對象);CopyTo 用于將集合的項目按給定索引復制到數組。大體來(lái)說(shuō),我建議避免使用非泛型 ICollection 接口,因為泛型接口要有用得多。
ICollection<T>  此接口是 IEnumerable<T> 的擴展(因此也是 IEnumerable 的擴展接口)。它還公開(kāi)五個(gè)新方法和兩個(gè)新屬性。方法包括 Add(用于將新元素添加到集合中)、Remove(用于刪除元素)、Clear(用于刪除所有元素)、Contains(用于確定某個(gè)項目是否在集合中)和 CopyTo(用于將項目復制到數組)。兩個(gè)只讀屬性是 Count(與非泛型 ICollection 中的相同)和 IsReadOnly,后者告訴我們集合是否為只讀,或者說(shuō)無(wú)法刪除或添加項目(即使集合為只讀,集合中的可變項目仍然可以更改)。
此接口作為任何自定義集合的起點(diǎn)都非常有用。如果不知道要在集合中存儲什么類(lèi)型的項目(或要存儲多種類(lèi)型的項目),用 ICollection<Object> 即可,實(shí)際上得到的是非泛型的擴展 ICollection 接口。
IList 和 IList<T>  IList 是 ICollection 的擴展。除了 ICollection(泛型或非泛型版本)中的所有內容外,它還有 IndexOf、Insert 和 RemoveAt 方法以及一個(gè)索引器,用于獲取和設置集合中的任何項目,就如同使用數組一樣。非泛型 IList 也包含存在于泛型 ICollection 中和不存在于非泛型 ICollection 中的方法(Add、Remove、Clear 和 Contains)。創(chuàng )建自定義集合時(shí) IList 接口非常有用,可用于自行添加和刪除項目,獲取或設置任何項目的值。RemoveAt 方法可根據索引刪除項目(而常規 Remove 只能根據值刪除項目)。Insert 方法用于在列表的任何位置添加項目,而常規 Add 只能在最后添加。
IDictionary 和 IDictionary<TKey, TValue>  IDictionary 是 ICollection 的擴展。它支持用一個(gè)鍵在集合中存儲和查找項目的概念。除了 ICollection 支持的所有方法外,它還公開(kāi)了將鍵與添加的項目相關(guān)聯(lián)的另一個(gè) Add 重載。ContainsKey 方法將檢查是否存在特殊鍵。Keys 和 Values 屬性可返回 IDictionary 中所有鍵或值的 ICollection、基于鍵而不是值的刪除重載,以及使用該鍵的索引器。該接口的泛型版本要復雜一些,因為它允許分別指定值類(lèi)型和鍵類(lèi)型。
再次強調泛型或非泛型
創(chuàng )建自定義集合時(shí),可能不必使之成為泛型。如果知道集合要存儲的對象類(lèi)型,而且知道這些類(lèi)型將來(lái)不會(huì )改變,則可使用固定類(lèi)型的集合。您仍可以擴展泛型框架集合或使用泛型接口,但類(lèi)總會(huì )存儲特定類(lèi)型的對象。
如果您要構建庫或更通用的集合(如樹(shù)或圖),那么創(chuàng )建泛型可能是一個(gè)不錯的主意。這樣此類(lèi)型的使用者就能夠將它與各種類(lèi)型一起使用,而且沒(méi)有使用 Object 和來(lái)回轉換的缺點(diǎn)。通用有向圖類(lèi)可能如下所示:
class DirectionalGraph<T> :IEnumerable<T>, ICollection<T>, IList<T>{public void Clear() { }public void Add(T item, IEnumerable<T> inNodes,IEnumerable<T> outNodes) { }public void Remove(T item) { }public bool Contains(T item) { }static public DirectionalGraph<T> EmptyGraph { get{}}// implement the interfaces...}
 
家族樹(shù)
下一個(gè)示例中,我將實(shí)現一個(gè)自定義的集合來(lái)存儲用于家譜目的的家族樹(shù)(請參見(jiàn)圖 3)。為簡(jiǎn)化起見(jiàn),我將做如下假設:每個(gè)人都有性別和年齡,每個(gè)人都有生父母。讓我們稱(chēng)他們?yōu)槟赣H和父親。
樹(shù)是由節點(diǎn)構成的特殊集合類(lèi)型。每個(gè)節點(diǎn)(如圖 4 中的 Person 類(lèi))都存儲著(zhù)有關(guān)樹(shù)中其他節點(diǎn)的信息。有一個(gè)特殊的節點(diǎn)被稱(chēng)為“根”,它是樹(shù)的基礎。所有其他節點(diǎn)都可以從樹(shù)的根節點(diǎn)開(kāi)始遍歷訪(fǎng)問(wèn)。我還實(shí)現了 IEnumerable<T>,通過(guò) foreach 循環(huán)枚舉 FamilyTree 的所有成員。所有人員都輸入到樹(shù)中后,您應該能夠回答如下問(wèn)題:A 和 B 兩個(gè)人之間是什么關(guān)系?
注意,此示例中并沒(méi)有實(shí)現所有可能的關(guān)系,但您可以自己向 FindRelationship 方法添加更多的關(guān)系。另外還需要注意,為了示例的清晰起見(jiàn),并沒(méi)有對所有方法都進(jìn)行充分的參數檢驗。建議您在實(shí)現之前確保每個(gè)方法只接受有效的參數值。
在運行圖 5 中的示例時(shí),應該注意圖 6 中顯示的輸出。
圖 6 家族樹(shù)輸出示例(單擊該圖像獲得較小視圖)
圖 6 家族樹(shù)輸出示例  (單擊該圖像獲得較大視圖)
此刻您應該對 .NET Framework 中的集合、它們是什么,以及使用它們的時(shí)機和原因有了很好的理解。集合可以是編程工具箱中的強大工具,因此了解它何時(shí)有用以及如何聰明地使用它都非常重要。如果您需要更多的信息,請參閱“更多參考資料”側欄中的資源。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
在VBA中使用.NET HashTable返回類(lèi)型
IEnumerable的用法
我也說(shuō) IEnumerable,ICollection,IList,List之間的區別
.NET集合類(lèi):定義,用途及使用條件
數組為什么可以使用linq查詢(xún)
C# IEnumerable<T>、IEnumerator<T>、List<T>、ArrayList、[]數組各各的區別
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久