標籤:style blog http color 使用 strong io width
本文主要的目的是想簡單的探討一下C#中List針對記憶體的操作過程,以便以後遇到該種情況可以避免走進誤區,內容非常簡單,只是在此作為記錄。能幫到人最好,幫不到就當給自己提個醒。C#將複雜的指標操作全都隱藏到後台去處理,以至於是我們很到看到C#的本質。
C#中list<T> list=new List<T>();中new的過程是建立一塊記憶體空間,是建立一個沒有元素的空列表對象。
C#中list.Clear()是把new之後的那塊記憶體空間的內容清空,並不是刪除這塊記憶體空間,是清除原先列表對象的元素,還是那個對象,元素沒了。
下面就說一下在哪種情況下會因為誤用clear導致程式出現異常bug。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace listAndnew
{
public class objectmouse
{
public string Name { get; set; }
public bool Sex { get; set; }
public int Age { get; set; }
}
class Program
{
static List<objectmouse> list = new List<objectmouse>();
static List<List<objectmouse>> list1 = new List<List<objectmouse>>();
static Random seed = new Random();
static void Main(string[] args)
{
int a = 0;
while (a < 2)
{
int flag = 0;
objectmouse mouse = new objectmouse();
list.Clear();///////////使用clear()方法輸出圖1
//list = new List<objectmouse>();/////////////使用new輸出圖2
while (flag < 2)
{
mouse.Name = "小白鼠";
mouse.Age = seed.Next(20);
mouse.Sex = true;
list.Add(mouse);
flag++;
}
list1.Add(list);
a++;
}
for (int i = 0; i < list1.Count; i++)
{
for (int j = 0; j < list.Count; j++)
{
Console.WriteLine("Name" + list1[i][j].Name + "Sex:" + list1[i][j].Sex + "Age:" + list1[i][j].Age);
}
Console.WriteLine("----------------華麗的分割線-------------------");
}
Console.ReadKey();
}
}
}
圖1 圖2