C#.NET 밑에 있는List 집합 순환 추가 대상 (예:list.add (모델)) 은 왜 전체list 집합이 같은 데이터로 나타납니까?

2218 단어 C#
여러분, 이 코드에 문제가 있는지 없는지 먼저 시험해 봅시다.
            stuModel mod = new stuModel();
            while (dr.Read())
            {
                mod.DDID = dr["DDID"].ToString();
                mod.CPfenlei = dr["CPfenlei"].ToString();
                mod.CPguige = dr["CPguige"].ToString();
                mod.CPMach = (int)dr["CPMach"];
                mod.CPName = dr["CPName"].ToString();
                mod.CPyanse = dr["CPyanse"].ToString();
                list.Add(mod);
            }

발견했어?이렇게 써서mod 대상의 실례화를 순환 밖에 두면 마지막 결과는 우리 제목에 나타난 것처럼 데이터가 나오는 것과 같고 마지막 데이터이다.이것은 우리가 자주 소홀히 하는 문제이다. 왜냐하면 성능을 고려하여 우리는 일반적으로 실례화 대상을 순환 바깥쪽에 쓰지만 이 문제가 발생하기 때문이다. 그러면 이것은 왜 그런가?
원인은 코드에서mod 대상을 실례화할 때 메모리에 이mod 대상을 더미에 저장하고 창고에 지향 더미의 주소를 분배하는 것이다.우리가 한 번씩 순환하여mod의 각 속성 값을 바꿀 때, 사실은 무더기를 바꾸고 있지만list.dd(mod)를 추가할 때mod 대상을 추가합니다. 실제로mod가 창고에 존재하는 지향적 주소를 추가합니다. 주소는 처음부터 끝까지 바뀌지 않고 쌓인 데이터는 마지막 데이터까지 덮어씁니다.그래서 마지막에 우리는 데이터 총수가 맞지만 데이터는 똑같고 마지막 원인이다. 바로 이것이다!
우리는 실례화 대상의 조작을 순환 내부에 쓰면 된다. 이런 상황에서 대상의 방출을 고려할 필요가 없다.NET 베이스 메커니즘에서 쓰레기 회수 메커니즘은 이미 성숙했다. 예를 들어 이런 창설 대상은 회(i) 순환이 끝날 때 바로 방출하고 다음(i+1) 순환을 진행한다.
            while (dr.Read())
            {
                stuModel mod = new stuModel();
                mod.DDID = dr["DDID"].ToString();
                mod.CPfenlei = dr["CPfenlei"].ToString();
                mod.CPguige = dr["CPguige"].ToString();
                mod.CPMach = (int)dr["CPMach"];
                mod.CPName = dr["CPName"].ToString();
                mod.CPyanse = dr["CPyanse"].ToString();
                list.Add(mod);
            }

그러면 우리는 가끔 이런 코드를 볼 수 있다.
            stuModel mod = new stuModel();
            while (dr.Read())
            {
                mod = Class1.MapEntity(dr, properties);//         stuModel
                list.Add(mod);
            }

이럴 때 왜mod 대상의 실례화는 순환 바깥쪽에 쓰이지만 마지막 데이터는 정상적인 것일까?
이것은 순환할 때마다mod의 주소가 바뀌었기 때문이다.MapEntity 방법은 새로운mod를 우리에게 보여진mod에 부여했기 때문이다.여기에 부여된 것이 바로 창고의 주소이다.
-- 블로거 개인의 기술 교류 QQ군에 가입하신 것을 환영합니다. 121942786(BUG제작자협회)

좋은 웹페이지 즐겨찾기