안녕하세요. for문과 foreach문을 서로 비교하면서 공부중입니다.
for문은 정해진 횟수만큼 반복하거나 배열같은 자료구조의 원소에 인덱스로 접근해서 가공하는 경우에 사용하고 있습니다.
foreach문은 각 원소에 접근에서 출력한다거나 원소가 클래스일 경우 메서드를 호출하는 방식으로 사용하고 있습니다.
문득 '어차피 배열, 리스트, 딕셔너리 등등의 자료구조 원소들 전부 값을 변경해야 한다면 for보다 foreach가 타이핑하는 양이 줄어서 더 낫지 않을까'하는 생각이 들었습니다.
제가 작성한 코드입니다.
class Program
{
public static void Main(string[] args)
{
int[] t = new int[3];
foreach(var elem in t)
{
elem = 10;
}
}
}
반복변수인 elem에 값을 할당할 수 없다고 컴파일 오류가 발생합니다.
그렇다면 클래스로 한다면 가능하지 않을까 하여 다시 작성해봤습니다.
class Test
{
public int i;
}
class Program
{
public static void Main(string[] args)
{
Test[] t = new Test[3];
foreach(var elem in t)
{
elem.i = 10;
}
}
}
이번에는 NullReferenceException이 발생하더군요.
어째서 이런일이 발생하는지 모르겠습니다.
모든 원소를 기본값으로 한다면 Intialize() 메서드를 호출하면 되는 일이지만 기본값이 아니라 어떤 특정한 값을 초기값으로 하고 싶으면 어떻게 해야할까요?
[최초 등록일: ]
[최종 수정일: 7/30/2019]