1
Person 유형의 목록이 있습니다. 사람 목록을 만들면 이전 목록 요소의 정보가 현재 목록으로 바뀝니다. 나는 이것이 정적 클래스 변수의 문제라는 것에 대해 읽었지만 내 속성은 정적이 아닙니다.list 이전의 모든 요소를 바꿉니다
class Person{
private string _name;
private string _address;
public string Name{
get{ return _name;}
set { _name = value;}
public string Address{
get{ return _address;}
set { _address = value;}
}
}
파일에서 사람들을 읽어 문자열 배열로 저장합니다. 배열이 정확한지 확인하기 위해 단계를 밟았습니다. 그것은. 이 이상한 얻는 경우 여기
은 다음과 같습니다
string[] personArray;
Person tempPerson = new Person();
List<Person> people = new List<Person>();
foreach (string line in lines)//lines are the people from file, it is correct
{
personArray = line.Split(',');
if (personArray.Length == 2)
{
tempPerson.Name = personArray[0];
tempPerson.Address = personArray[1];
people.Add(tempPerson);
}
}
내가 코드를 단계별로 첫 번째 사람이 두 번째 사람이 을 추가, 제대로 추가 사람들을 조사하고 두 번째 사람의 정보가 있습니다. add 문 다음에 올 때까지 모든 것이 올바르게 보입니다.
정말 고마워요. 내가 추가에 문제가 아니라고 생각 했어? 나는 C++에서 이것을 수행하고 잘 동작 하는가? – Lainezor
@Lainezor : 이것이 모든 언어가 같은 방식으로 처리한다고 가정하기보다는 실제로 사용하는 언어에 대해 배우는 것이 중요합니다. .NET에서 참조와 개체의 차이점을 이해하는 것이 중요합니다. http://pobox.com/~skeet/csharp/references.html –
@Lainezor보기 - C++에서'벡터'을 가지고 있다면'people.push_back (tempPerson)'은'tempPerson' 객체를 벡터에 복사 할 것입니다 . C#에서'people.Add (tempPerson)'은'tempPerson'에 ** 참조 **를리스트에 추가합니다. 이것은 여러분의리스트가 하나의'Person' 객체에 대한 동일한 참조의 여러 사본을 포함한다는 것을 의미합니다. 이 객체를'tempPerson' 참조를 통해 돌연변이시키고 있으므로 모든 목록 요소에 변경 사항이 나타납니다. –
Lee