类的引用及添加到列表中的问题
众所周知,引用类型和值类型的存储分别在于堆和栈上面。不同的是,引用类型创建时分配的空间是固定的,值类型则是由CPU管理。
错误代码:在循环时把类创建放在了外面,此时表中添加的类指向同一个地址,而且更改该类的值,表中所有的值同时更改。
private class T {int id;}
List<T> T_PCBTest_Result = new List<T>();
T data = new T();
int i = 0; while(i < 100) { data = i++; T_PCBTest_Result.Add(data); }
正确代码:
private class T {int id;}
List<T> T_PCBTest_Result = new List<T>();
int i = 0;
while(var item in objList) { T data = new T(); data.id = i++; T_PCBTest_Result.Add(data); }
除此之外,两个同类型引用型变量之间如果直接使用等号进行赋值时,指向的空间是同一片空间
List<TPCBTestResultPage> objList = m_TPCBTestResultService.GetTPCBTestResult(PageData).RDisplay; List<TPCBTestResultPage> distinct = new List<TPCBTestResultPage>(); distinct = objList;
所以想要把表中的的内容拷贝出来就需要使用类中的添加函数
List<TPCBTestResultPage> objList = m_TPCBTestResultService.GetTPCBTestResult(PageData).RDisplay; List<TPCBTestResultPage> distinct = new List<TPCBTestResultPage>(); distinct.AddRange(objList);