C\#에서 foreach 가 옮 겨 다 니 는 사용 방법 을 깊이 이해 합 니 다.

머리말
본 고 는 주로 C\#에서 foreach 가 옮 겨 다 니 는 용법 과 c\#foreach 를 사용 할 때 알 아야 할 것들 을 소개 하고 참고 학습 을 제공 합 니 다.다음은 더 이상 말 하지 않 겠 습 니 다.상세 한 소 개 를 살 펴 보 겠 습 니 다.
1.C\#에서 foreach 를 옮 겨 다 니 는 방법
foreach 순환 은 집합 에 있 는 모든 요 소 를 열거 하 는 데 사 용 됩 니 다.foreach 문장의 표현 식 은 키워드 in 으로 구 분 된 두 가지 항목 으로 구성 되 어 있 습 니 다.in 오른쪽 항목 은 집합 명 이 고 in 왼쪽 항목 은 변수 명 으로 이 집합 에 있 는 모든 요 소 를 저장 합 니 다.
이 순환 의 운행 과정 은 다음 과 같다.순환 할 때마다 집합 에서 새로운 요소 값 을 꺼낸다.읽 기 전용 변수 에 넣 으 십시오.괄호 에 있 는 전체 표현 식 의 반환 값 이 true 이면 foreach 블록 에 있 는 문 구 를 실행 할 수 있 습 니 다.집합 에 있 는 요소 가 모두 접근 하면 전체 표현 식 의 값 이 false 이 고 제어 절 차 는 foreach 블록 뒤에 있 는 8232℃의 실행 문 으로 전 환 됩 니 다.
foreach 문 구 는 항상 배열 과 함께 사용 되 며,다음 인 스 턴 스 는 foreach 문 구 를 통 해 배열 의 값 을 읽 고 표시 합 니 다.
배열 의 속성:Array.Length 배열 의 용량
이 속성 을 이용 하면 우 리 는 배열 대상 이 저장 할 수 있 는 용량 값,즉 배열 의 길이,요소 의 개 수 를 얻 을 수 있다.이것 은 비교적 이해 하기 쉽다.배열 은 다른 속성 도 있다.예 를 들 어 배열 의 차원 등 속성의 용법 이 비교적 간단 하고 하 나 를 배 울 수 있다.다른 형식 이 대체적으로 일치 하 는데 여기 서 우 리 는 예 를 들 지 않 는 다.
배열 의 차원,용량 이 비교적 많 을 때 C\#는 foreach 문 구 를 제공 하여 집합/배열 의 모든 요 소 를 읽 는 데 사 용 됩 니 다.우 리 는 이러한 기능 을 옮 겨 다 니 는 것 이 라 고 합 니 다.문법 은 다음 과 같다.
배열 옮 겨 다 니 기:foreach(type objectName in collection/Array)
이 문 구 는 배열 에 저 장 된 변수 값 을 하나하나 검사 하고 일일이 꺼 냅 니 다.type 은 읽 을 배열 대상 이 obName 변수 에 저 장 될 데이터 형식 입 니 다.obName 은 type 형식의 변수 이름 을 정의 합 니 다.집합 과 배열(collection/Array)에서 얻 을 때마다 나타 내 는 요소 입 니 다.collection/Array 는 액세스 할 배열 대상 입 니 다.이 방법 으로 foreach 를 하나만 쓰 면 교차 배열 을 제외 한 모든 차원 의 배열 을 옮 겨 다 닐 수 있 습 니 다.
주:object Name 의 데이터 형식 type 은 collection/Array 대상 의 형식 과 같 거나 커 야 합 니 다.
다음은 foreach 와 for 로 규칙 배열 을 옮 겨 다 니 는 예 를 들 어 한 배열 이 위 수 를 얻 는 방법 과 관련 되 어 foreach 가 규칙 배열 을 한꺼번에 옮 겨 다 니 는 장점 을 비교 합 니 다.

int[,,] a = new int[2, 2, 2] { {{ 1, 2 }, { 3,4}},{{ 5, 6 }, { 7,8}} };//     2 2 2   3   a
for (int i = 0; i < a.GetLength (0) ;i++ ) // Array.GetLength(n)    [0,1,,,n]        ,0   ,1 ,n      n+1 
{
 for (int j = 0; j < a.GetLength(1); j++)
 {
 for (int z = 0; z < a.GetLength(2);z++ )//2           ,     n    n for  
 {
 Console.WriteLine(a[i,j,z]);
 }
 }
}
foreach 순환 으로 a 배열 을 한 번 에 옮 겨 다 니 기

int[,,] a = new int[2, 2, 2] { {{ 1, 2 }, { 3,4}},{{ 5, 6 }, { 7,8}} };//    2 2 2   3   a
foreach(int i in a)
{
 Console .WriteLine (i);
}
이 두 가지 코드 가 실 행 된 결 과 는 같은 줄 마다 하나의 요소 로 모두 8 줄 이 고 요 소 는 각각 1,2,3,4,5,6,7,8 이다.
다음 에 예 를 들 어 for 와 foreach 순환 을 이용 하여 액세스 배열 요 소 를 만 드 는 예 입 니 다.먼저 사용자 에 게 학생 의 개 수 를 입력 한 다음 에 학생 의 개 수 를 학생 의 이름 을 저장 하 는 배열 names 의 요소 갯 수로 제시 하고 for 순환 을 이용 하여 배열 의 색인 i 에 따라 0 자리 부터'학생 이름 입력'의 힌트 를 순환 적 으로 출력 합 니 다.또한 사용자 가 입력 한 학생 의 이름 을 배열 의 색인 방식names[i]에 따라 names 배열 에 저장 합 니 다.for 순환 횟수 의 최대 치(즉 색인 의 최대 치)는 배열 속성.Length을 통 해 얻 을 수 있 습 니 다.용량 과 색인 간 의 관 계 는index=Array.Length-1이 라 고 말 했 습 니 다.이 문 제 는 i 의 최대 치 입 니 다.
주의해 야 할 것 은 foreach 를 통 해 배열 의 요 소 를 일일이 얻 을 수 있 을 뿐 이 문 구 를 이용 하여 배열 에 저 장 된 요 소 를 바 꿀 수 없다 는 것 이다.

using System;
class Program
{
 static void Main()
 {
 int count;
 Console.WriteLine("         ");
 count = int.Parse(Console.ReadLine());
 string[]names = new string[count];
 for (int i = 0; i < names.Length; i++)
 {
 Console.WriteLine("    {0}      ", i + 1);
 names[i] = Console.ReadLine();
 }
 Console.WriteLine("        ");
 foreach (string name in names)
 {
 Console.WriteLine("{0}", name);
 }
 Console.ReadKey();
 }
}
2.c\#foreach 를 사용 할 때 알 아야 할 것
c\#에서 foreach 를 통 해 목록 을 옮 겨 다 니 는 것 은 자주 사용 하 는 방법 으로 사용 하기에 도 편리 하고 성능 도 for 와 큰 차이 가 없다.근 데 왜 신경 써 야 돼 요?우 리 는 먼저 아래 의 이 말 을 살 펴 보 자.분 배 된 메모리 수량 과 테스트 를 완성 하 는 데 필요 한 시간 사이 에 직접적인 관계 가 있다.우리 가 단독으로 볼 때 메모리 분 배 는 결코 매우 비 싸 지 않다.그러나 메모리 시스템 이 가끔 사용 하지 않 는 메모 리 를 청소 할 때 문제 가 발생 하고 문제 가 발생 하 는 빈도 와 할당 할 메모리 의 수량 이 정비례 한다.따라서 메모리 가 많이 분 배 될 수록 메모리 에 쓰레기 를 회수 하 는 빈도 가 잦 아 지고 코드 성능 이 떨 어 집 니 다.
위 에서 보 듯 이 메모리 의 회수 가 매우 손실 되 는 자원 입 니 다.그러면 우 리 는.net 내부 유형의 실현 을 다시 봅 시다.
Array:

// System.Array

public IEnumerator GetEnumerator()

{

int lowerBound = this.GetLowerBound(0);

if (this.Rank == 1 && lowerBound == 0)

{

return new Array.SZArrayEnumerator(this);

}

return new Array.ArrayEnumerator(this, lowerBound, this.Length);

} 
List:

// System.Collections.Generic.List<T>

public List<T>.Enumerator GetEnumerator()

{

return new List<T>.Enumerator(this);

} 
Dictionary

// System.Collections.Generic.Dictionary<TKey, TValue>

public Dictionary<TKey, TValue>.Enumerator GetEnumerator()

{

return new Dictionary<TKey, TValue>.Enumerator(this, 2);

} 
상기 코드 를 보면 저 희 는 foreach 작업 을 할 때 Enumerator 를 구축 합 니 다.이 점 은 따 질 필요 가 없다 고 생각 하 는 사람 도 있 을 지 모 르 지만 관심 을 갖 지 않 는 경우 가 많다.하지만 메모리 분석 을 통 해 알 수 있 는 결과 Enumerator 구축 이 상위 권 에 들 었 다 면 정말 관심 을 가 져 야 한다.아주 간단 한 응용 프로그램 은 몇 W 의 병발 을 처리 해 야 한다 고 가정 합 니 다.매번 몇 번 씩 foreach 가 존재 한다 면 얼마나 많은 대상 의 생 성과 회수 가 있 는 지 계산 할 수 있 습 니까?
다음 간단 한 분석 도 를 보 세 요.여 기 는 하나의 List'1 이 존재 합 니 다.만약 구성 요소 내부 에 여러 개의 foreach 가 동시에 발생 한다 면 어떻게 되 겠 습 니까?

for 로 바 꾼 결 과 는 어 땠 어 요?

총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기