技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營(yíng)

贊助商

分類(lèi)目錄

贊助商

最新文章

搜索

[解決]使用泛型類(lèi)型“System.Collections.Generic.List<T>”需要1個(gè)類(lèi)型參數(shù)

作者:admin    時(shí)間:2023-5-4 18:28:29    瀏覽:

今天從網(wǎng)上復(fù)制過(guò)來(lái)一段代碼,結(jié)果下面這行代碼報(bào)錯(cuò)了:

var list = new List(); 

報(bào)錯(cuò)提示為:

使用泛型類(lèi)型“System.Collections.Generic.List<T>”需要1個(gè)類(lèi)型參數(shù)

之后我把這行代碼改為如下這樣:

List<String> list = new List<String>();

編譯成功,并且執(zhí)行結(jié)果完全正確。

為什么要這樣改寫(xiě)代碼?這就需要我們了解一下C#泛型類(lèi)之List<T>

C#泛型類(lèi) List<T> 的定義

System.Collections.Generic.List<T> 類(lèi)表示可通過(guò)索引訪(fǎng)問(wèn)的對(duì)象的強(qiáng)類(lèi)型列表。提供用于對(duì)列表進(jìn)行搜索、排序和操作的方法。T為類(lèi)型參數(shù),代表列表中元素的類(lèi)型。該類(lèi)實(shí)現(xiàn)了IList<T>泛型接口,是ArrayList類(lèi)的泛型等效類(lèi),其大小可按需動(dòng)態(tài)增加。

List<T> 轉(zhuǎn)換 t 列表為對(duì)象

在 C# 中,可以使用 System.Collections.Generic.List<T> 類(lèi)型來(lái)創(chuàng)建一個(gè)具有強(qiáng)類(lèi)型元素的列表。如果你有一個(gè) t 列表,你可以通過(guò)將其傳遞給 List<T> 的構(gòu)造函數(shù)來(lái)將其轉(zhuǎn)換為 List<T> 類(lèi)型。

例如,如果 t 列表包含整數(shù)類(lèi)型的元素,你可以使用以下代碼將其轉(zhuǎn)換為 List<int> 類(lèi)型:

List<int> c = new List<int>(t);

此代碼將創(chuàng)建一個(gè)名為 c 的新列表,其中包含 t 列表中的所有整數(shù)元素。如果你的 t 列表包含其他類(lèi)型的元素,只需將 int 替換為相應(yīng)的類(lèi)型即可,比如,如果 t 列表包含字符串類(lèi)型的元素,你可以使用以下代碼將其轉(zhuǎn)換為 List<String> 類(lèi)型:

List<String> list = new List<String>();

這正是本文開(kāi)頭報(bào)錯(cuò)代碼的正確寫(xiě)法。

需要注意的是,這個(gè)操作可能會(huì)耗費(fèi)一些時(shí)間和內(nèi)存,具體取決于 t 列表的大小。如果你的 t 列表非常大,而且你只需要遍歷其元素,那么你可能會(huì)希望僅使用 IEnumerable<T> 接口或使用 foreach 循環(huán)進(jìn)行遍歷,而不需要將其轉(zhuǎn)換為 List<T> 類(lèi)型。

List<T> 構(gòu)造函數(shù)

名稱(chēng) 說(shuō)明
List<T>() 初始化 List<T> 類(lèi)的新實(shí)例,該實(shí)例為空并且具有默認(rèn)初始容量(0)。
List<T>(IEnumerable<T>) 初始化 List<T> 類(lèi)的新實(shí)例,該實(shí)例包含從指定集合復(fù)制的元素并且具有足夠的容量來(lái)容納所復(fù)制的元素。
List<T>(Int32) 始化 List<T> 類(lèi)的新實(shí)例,該實(shí)例為空并且具有指定的初始容量。

備注

1、 List<T> 類(lèi)既使用相等比較器又使用排序比較器。

諸如 Contains、IndexOfLastIndexOfRemove 這樣的方法對(duì)列表元素使用相等比較器。類(lèi)型 T 的默認(rèn)相等比較器按如下方式確定。如果類(lèi)型 T 實(shí)現(xiàn) IEquatable<T> 泛型接口,則相等比較器為該接口的 Equals(T) 方法;否則,默認(rèn)相等比較器為 Object.Equals(Object)

諸如 BinarySearchSort 這樣的方法對(duì)列表元素使用排序比較器。類(lèi)型 T 的默認(rèn)比較器按如下方式確定。如果類(lèi)型 T 實(shí)現(xiàn) IComparable<T> 泛型接口,則默認(rèn)比較器為該接口的 CompareTo(T) 方法;否則,如果類(lèi)型 T 實(shí)現(xiàn)非泛型 IComparable 接口,則默認(rèn)比較器為該接口的 CompareTo(Object) 方法。如果類(lèi)型 T 沒(méi)有實(shí)現(xiàn)其中任一個(gè)接口,則不存在默認(rèn)比較器,并且必須顯式提供比較器或比較委托。

2List<T> 不保證是排序的。在執(zhí)行要求 List<T> 已排序的操作(例如 BinarySearch)之前,你必須對(duì) List<T> 進(jìn)行排序。

3、 List<T> 不保證是排序的。在執(zhí)行要求 List<T> 已排序的操作(例如 BinarySearch)之前,你必須對(duì) List<T> 進(jìn)行排序。

4、 使用整數(shù)索引可以訪(fǎng)問(wèn)此集合中的元素。此集合中的索引從零開(kāi)始。

5、 List<T> 接受 null 作為引用類(lèi)型的有效值并且允許有重復(fù)的元素。

6、 大多數(shù)情況下List<T>執(zhí)行得更好并且是類(lèi)型安全的,可以替換ArrayList,但是如果對(duì)類(lèi)型 T 使用值類(lèi)型,則編譯器將特別針對(duì)該值類(lèi)型生成 List<T> 類(lèi)的實(shí)現(xiàn)。這意味著不必對(duì) List<T> 對(duì)象的列表元素進(jìn)行裝箱就可以使用該元素,并且在創(chuàng)建大約 500 個(gè)列表元素之后,不對(duì)列表元素裝箱所節(jié)省的內(nèi)存將大于生成該類(lèi)實(shí)現(xiàn)所使用的內(nèi)存。如果創(chuàng)建小于500個(gè)元素,建議使用ArrayList。

相關(guān)文章

標(biāo)簽: CSharp  asp.net  泛型類(lèi)型  List方法  
x
  • 站長(zhǎng)推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */