>백엔드 개발 >C++ >C#의 어떤 클래스가 Foreach 루프를 지원합니까?

C#의 어떤 클래스가 Foreach 루프를 지원합니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-10 08:43:43986검색

What Classes in C# Support Foreach Loops?

C#의 foreach 루프 심층 분석: 어떤 클래스를 사용할 수 있나요?

C#의 foreach 루프는 프로그래머가 컬렉션의 요소를 쉽게 반복할 수 있게 해주는 필수 기능입니다. 그러나 효과적인 사용을 위해서는 어떤 클래스가 foreach 루프를 사용할 수 있는지 이해하는 것이 중요합니다.

foreach 루프를 지원하는 클래스

모든 클래스가 foreach 루프를 지원하는 것은 아닙니다. 특정 조건을 충족하는 클래스만 foreach 루프를 사용할 수 있습니다. 답변에 따르면 핵심은 클래스에 공개 GetEnumerator() 메서드가 있다는 것입니다. 이 메서드는 bool MoveNext() 메서드와 T 유형의 Current 속성이 있는 개체를 반환해야 합니다.

일반적인 구현 방법

실제로 이 요구 사항에 대한 보다 일반적인 해석은 IEnumerable/IEnumerable<T> 인터페이스를 구현하는 것입니다. 이러한 인터페이스에는 각각 IEnumerator/IEnumerator<T>이 있어야 합니다.

지원되는 데이터 구조

ICollection/ICollection<T> 인터페이스를 구현하는 클래스는 암시적으로 foreach 루프도 지원합니다. 여기에는 Collection<T>, List<T> 및 배열(T[])과 같은 표준 컬렉션 유형이 포함됩니다. 따라서 가장 일반적으로 사용되는 "데이터 컬렉션"은 foreach 루프를 사용하여 탐색할 수 있습니다.

foreach 루프 작동 방식

foreach (int i in obj) { ... }과 같은 foreach 루프는 내부적으로 다음 코드 구조와 유사합니다.

<code class="language-csharp">var tmp = obj.GetEnumerator();
int i; // C# 4.0 之前
while (tmp.MoveNext()) {
    int i; // C# 5.0 及之后
    i = tmp.Current;
    { ... } // 你的代码
}</code>

변형 및 메모

  1. IDisposable 지원: 열거자(tmp)가 IDisposable를 구현하는 경우 적절한 폐기를 보장하기 위해 using 블록처럼 호출됩니다.
  2. 선언 위치: C# 5.0 이전에는 루프 변수(예: int i) 선언이 루프 본문 외부에 배치되었지만 C# 5.0부터는 루프 본문 내부에서 선언됩니다. 중첩된 무명 메서드나 람다 식 내에서 루프 변수를 사용할 때 이러한 구별이 중요해집니다.

위 내용은 C#의 어떤 클래스가 Foreach 루프를 지원합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.