문제

이 될 수 있는 간단한 질문에 심지어 학교할 수 있는 소년이 대답합니다.

는 무엇입의 유사점과 차이점에 대해 설명합"ForEach"과"사용"(요청의 인터뷰에서).

내 가정이었다

1)모두가 열거

2)사용하여 처리할 수 있는 메모리의 자원이지만,foreach 할 수 없습니다.를 사용하여 지원합 IDisposable,foreach 할 수 없습니다.

나는 알고 싶습니다.

도움이 되었습니까?

해결책

유사점:

  • 그들은 모두 논리적인 코드의 확장을 제공,보일러 플레이트 코드의 복잡한 시나리오 그렇지 않으면
  • 이 모두 포함 숨겨진 변수에 의해 도입되는 컴파일러:에 대한 반복하고의 스냅샷을 처분할 수 있는 객체를 각각

하지만 그것이 어디에 있는지에 대해 끝을...

  • using IDisposable; foreach 에서 트리거 IEnumerable[<T>], 하지만 실제로는 오리 입력(필요가 없습 IEnumerableforeach)
  • using 는 예측 가능 try/finally 구조; foreach 을 포함 Dispose() 는 경우 반복기 IEnumerable<T>

어떤 경우에,나는 말 using 가까운 lockforeach.

다른 팁

  1. Nope, foreach 폐의 IEnumerable 는 경우를 구현하는 IDisposable.

using 정의 범위 밖에서는 개체는 삭제 됩니다.하지 않는 루프 또는 반복.

그들은 모두들 다른 목적이 있습니다.

foreach 을 위해 만들어 열거하는 항목에서 모음/배열입니다. using 편리한 건설을 확인 하기 위한 제대로 처리한 것은 귀하의 사용합니다.을 때에도 예외가 발생하는 예입니다.

의 유사성을 위한 이러한 두 개의 구문은 그냥,니다.할 수 있는 사람의 유사성(에서 아주 명백합니다:'그들은 모두에 키워드 C#')?

의 주요 차이점 foreachusingforeach 사용되는 열거를 통해 IEnumerable 반면 using 사용되는 범위를 정의 밖에 있는 객체는 삭제됩니다.

거기에 하나의 유사성은 사 foreachusing:자 구현 IDisposableforeach 암시적으로 포장의 사용에 열거자 using 니다.다른 방법으로의 이 말은 즉 foreach 레코딩될 수 있으로 사용 블록 및 결과 IL 것이 동일합니다.

코드 블록

var list = new List<int>() {1, 2, 3, 4, 5};
foreach(var i in list) {
    Console.WriteLine(i);
}

은 효과와 같

var list = new List<int>() {1, 2, 3, 4, 5};
using (var enumerator = list.GetEnumerator()) {
    while (enumerator.MoveNext()) {
        Console.WriteLine(enumerator.Current);
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top