1. 程式人生 > >C#如何修改List中的結構體

C#如何修改List中的結構體

C# List與 ArrayList用法與區別

問題:

請舉例講下List<>的用法?來個簡單的例子。。。。謝謝 比如我用List<int>test =newList<int>(); 那麼例項test中的所有方法的型別就是int嗎?

答案:

一般的如果要返回一個集合陣列會用到他。他增加了程式碼的可讀性,通過他,前臺編碼的人就可以不費很大力氣了解到這個欄位什麼意思。比如聲明瞭一個Users實體類 publicCalssUsers { publicstringName; publicintAge; }這個只是代表一個使用者的物件資訊,如果你獲取的是個使用者列表的化,就可以用

List<Users> usersList =newList<Users>;然後向列表裡新增每個使用者資訊 Users users =newUsers(); users.Name="ssss";users.Age="12"; userList.add(users); 這樣迴圈的向列表裡新增資訊,然後返回這個列表,在前臺頁面就可以用迴圈讀出這些資訊。

這個是2.0的新特徵泛型,用泛型可以解決裝箱拆箱問題,List<int>test =newList<int>()這樣定義,test這個集合就只能放進了int資料,因此取出的時候不用(inttest[i]顯式轉換了。

名稱空間: usingSystem.Collections; classProgram { //做個比較 staticvoidMain(string[] args) { //new物件 Cls a1 =newCls(); Cls a2 =newCls(); //存放物件 List<Cls> testfanxing =newList<Cls>(); testfanxing.Add(a1); ArrayList testarray =newArrayList(); testarray.Add(a2); //取物件 Cls b1 = testfanxing[0]; Cls b2 = testarray

[0];//這句報錯! 改為:Cls b2 = (Cls)testarray[0];就可正常通過,但是用了型別強制轉換 //泛型啥好處? //1。避免了強制型別轉換而造成程式碼可讀性差。 //2。既然有了型別強制轉換,問題來了:型別強制轉換可能會用到裝箱和拆箱過程,耗時。 //3。再由於有強制型別轉換,在編譯的時候可能不會包錯,但是執行程式碼的時候有可能會因為轉換失敗而出現錯誤。這就是我們說的非安全程式碼。 } } classCls {} 簡單來說,泛型就是限制了操作型別。 用微軟的話講: “新增到ArrayList中的任何引用或值型別都將隱式地向上強制轉換為Object。如果項是值型別,則必須在將其新增到列表中時進行裝箱操作,在檢索時進行取消裝箱操作。強制轉換以及裝箱和取消裝箱操作都會降低效能;在必須對大型集合進行迴圈訪問的情況下,裝箱和取消裝箱的影響非常明顯。”

另外一個list用法例項:

C#裡List的用法 主程式程式碼: staticvoidMain(string[] args) { ClassList listClass =newClassList(); Console.WriteLine("請輸入第個字串"); string a =Console.ReadLine(); Console.WriteLine("請輸入第二個字串"); string b =Console.ReadLine();

foreach(string n in listClass.strList(a, b)) { Console.WriteLine(n); }

類: classClassList { publicList<string> strList(string str1,string str2) { string stra = str1 + str2; string strb = str2 + str1; string strc = str1 + str1; List<string> listStr =newList<string>(); listStr.Add(stra); listStr.Add(strb); listStr.Add(strc); return listStr; } }

輸出:

ab

ba

aa

關於struct例項

List類是ArrayList類的泛型等效類,某些情況下,用它比用陣列和ArrayList都方便。

我們假設有一組資料,其中每一項資料都是一個結構。

publicstructItem { publicintId; publicstringDisplayText; } 注意結構是不能給例項欄位賦值的,即publicintId=1是錯誤的。

usingSystem.Collections.Generic;

List<Item> items =newList<Item>();

//新增 Item item1 =newItem(); item1.Id=0; item1.DisplayText="水星"; items.Add(item1);

//新增 Item item2 =newItem(); item2.Id=1; item2.DisplayText="地球"; items.Add(item2);

//修改 //這裡使用的是結構,故不能直接用 items[1].DisplayText = "金星";,如果 Item 是類,則可以直接用。為什麼呢?因為結構是按值傳遞的。 Item item = items[1]; item.DisplayText="金星"; items[1]= item;