리스트를 통해 구조체의 맴버에 접근할때 다음과 같은 오류가 난다.
리스트의 코드는 대략 간략하게 다음과 같이 구성되어있다고 보면 알기 쉽다.
오류코드
리스트의 코드는 대략 간략하게 다음과 같이 구성되어있다고 보면 알기 쉽다.
- class List<T>
- {
- T[] m_listData;
- int m_nIdx;
- public List(int size)
- {
- m_listData = new T[size];
- }
- public void Add(T data)
- {
- m_listData[m_nIdx] = data;
- }
- //인덱서를 이용 배열의 값을 리턴함. 구조체는 값이 복사된다.
- public T this[int idx]
- {
- get { return m_listData[idx]; }
- set { m_listData[idx] = value; }
- }
- }
- struct StructA {
- public int m_nData;
- public void SetData(int a)
- {
- m_nData = a;
- }
- }
- static void Main()
- {
- listStruct[0].m_nData = 10; //컴파일에러. CS1612
- listStruct[0].SetData(10); //값이 변경되지않음.
- //위의 코드는 다음과 같은 코드라고 보면 이해하기 쉽다.
- StructA sA = listStruct[0];
- sA.m_nData = 10;
- sA.SetData(10);
- }
문제:
구조체를 이용하는 리스트는 멤버의 값을 인덱스로 접근하면 값을 변경하지못함.
결론:
인덱서는 겟터를 이용하여 배열의 값이 리턴되기때문에,
참조를 기본으로 하는 클래스는 문제없지만,
복사가 되는 구조체는 이러한 문제가 생길수 밖에 없는것이다.
댓글
댓글 쓰기