C\#9 새로운 기능 강화 foreach 상세 설명

Intro
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 또는 IEnumerable를 실현 할 수 있 습 니 다.교체 기 를 실현 하지 않 은 코드 에 대해 서 는 foreach 를 사용 할 수 있 습 니까?
Enumerator
우 리 는 처음에 언급 한 문 제 를 다시 살 펴 보고,어떻게 foreach 를 지지 하 는 지 를 실현 합 니까?

위의 VS 힌트 에서 알 수 있 듯 이 하나의 유형 이 foreach 를 지원 하려 면 세 가지 방법 으로 이 루어 질 수 있 습 니 다.
IEnumerable 실현IEnmuerable실현
  • GetEnumerator 방법 을 추가 합 니 다.방법 반환 값 유형 은 Current 속성 과 MoveNext 방법 이 필요 합 니 다.이 IEnumerator 를 참고 하 십시오.반환 유형 은 IEnumerator 또는 IEnumerator를 직접 실현 할 수 있 습 니 다.
  • 그렇다면 다른 사람 이 패키지 하 는 타 입 이 라면 foreach 를 지원 할 수 있 습 니까?C\#9 이후 면 됩 니 다.GetEnumerator 의 확장 방법 을 추가 할 수 있 습 니 다.아래 와 유사 합 니 다.
    
    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
  • https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-9
  • https://github.com/WeihanLi/SamplesInPractice/tree/master/CSharp9Sample
  • https://github.com/WeihanLi/SamplesInPractice/blob/master/CSharp9Sample/ForEachExtensions.cs
  • C\#9 의 새로운 기능 강화 에 관 한 foreach 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 C\#9 의 새로운 기능 에 관 한 foreach 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기