C\#9 새로운 기능 강화 foreach 상세 설명
C\#9 에서 foreach 의 사용 을 강화 하여 모든 대상 이 foreach 의 가능성 을 가지 게 합 니 다.
코드 를 보 겠 습 니 다.int 형식의 값 을 옮 겨 다 니 려 고 합 니 다.
생각해 보 세 요.우 리 는 어떻게 하면 위의 코드 를 컴 파일 할 수 있 습 니까?
교체 기 모드
교체 기 모드 는 취 합 대상 의 각 요 소 를 순서대로 방문 하고 이 대상 의 내부 표 시 를 드 러 내지 않 는 방법 을 제공 합 니 다.
교체 기 모드 는 집합 대상 의 옮 겨 다 니 는 행 위 를 분리 하고 하나의 교체 기 류 를 추상 화하 여 책임 을 지 는 것 이다.그러면 집합 내부 구 조 를 노출 하지 않 을 뿐만 아니 라 외부 코드 로 하여 금 내부 의 데 이 터 를 투명 하 게 방문 하 게 할 수 있다.
foreach 는 사실 교체 기 모드 의 문법 사탕 으로 집합 중의 데 이 터 를 옮 겨 다 닐 수 있 습 니 다.foreach 는 while 를 사용 하여 실현 할 수 있 습 니 다.예 를 들 어 다음 예제 와 같 습 니 다.
var enumerable = Enumerable.Range(1, 10).ToArray();
foreach (var i in enumerable)
{
Console.WriteLine(i);
}
while 재 작성 후 다음 과 같은 코드 를 사용 합 니 다:
var enumerator = enumerable.GetEnumerator();
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.Current);
}
c\#의 집합 은 기본적으로 교체 기 모드 를 실 현 했 습 니 다.foreach 를 직접 사용 하여 옮 겨 다 닐 수 있 습 니 다.사용자 정의 형식 에 대해 foreach 를 지원 하려 면 IEnumerable 또는 IEnumerableEnumerator
우 리 는 처음에 언급 한 문 제 를 다시 살 펴 보고,어떻게 foreach 를 지지 하 는 지 를 실현 합 니까?
위의 VS 힌트 에서 알 수 있 듯 이 하나의 유형 이 foreach 를 지원 하려 면 세 가지 방법 으로 이 루어 질 수 있 습 니 다.
IEnumerable 실현IEnmuerable
public static class ForEachExtensions
{
public static IEnumerator<char> GetEnumerator(this int num)
{
return num.ToString().GetEnumerator();
}
}
이때 C\#9 를 사용 하면 컴 파일 이 통 과 됩 니 다.LangVersion 을 수 동 으로 설정 하면 9 로 수정 해 야 합 니 다.그렇지 않 으 면 다음 과 같은 오 류 를 얻 을 수 있 습 니 다.확장 방법 을 추가 하고 C\#9 문법 을 사용 합 니 다:
More
이 기능 이 있 으 면 모든 유형 이 foreach 가 가능 합 니 다.교체 기 모드 를 실현 하지 못 한 유형 은 하나의 확장 방법 만 실현 하면 됩 니 다.
영접 C\#9,만물 모두 foreach~~
Reference
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
blade에서 config를 사용한 호출 방법(2중 foreach 이용 예)이번에는 Laravel의 템플릿 엔진인 blade에 config 파일 내에 있는 상수를 호출하는 방법을 소개하겠습니다. 다른 인기있는 PHP 템플릿 엔진과 달리 뷰에 직접 PHP를 작성할 수 있습니다. Blade 뷰...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.