문제
이 될 수 있는 간단한 질문에 심지어 학교할 수 있는 소년이 대답합니다.
는 무엇입의 유사점과 차이점에 대해 설명합"ForEach"과"사용"(요청의 인터뷰에서).
내 가정이었다
1)모두가 열거
2)사용하여 처리할 수 있는 메모리의 자원이지만,foreach 할 수 없습니다.를 사용하여 지원합 IDisposable,foreach 할 수 없습니다.
나는 알고 싶습니다.
해결책
유사점:
- 그들은 모두 논리적인 코드의 확장을 제공,보일러 플레이트 코드의 복잡한 시나리오 그렇지 않으면
- 이 모두 포함 숨겨진 변수에 의해 도입되는 컴파일러:에 대한 반복하고의 스냅샷을 처분할 수 있는 객체를 각각
하지만 그것이 어디에 있는지에 대해 끝을...
using
구IDisposable
;foreach
도 에서 트리거IEnumerable[<T>]
, 하지만 실제로는 오리 입력(필요가 없습IEnumerable
대foreach
)using
는 예측 가능try
/finally
구조;foreach
도 을 포함Dispose()
는 경우 반복기IEnumerable<T>
어떤 경우에,나는 말 using
가까운 lock
보 foreach
.
다른 팁
- 아
- Nope,
foreach
폐의IEnumerable
는 경우를 구현하는IDisposable
.
using
정의 범위 밖에서는 개체는 삭제 됩니다.하지 않는 루프 또는 반복.
그들은 모두들 다른 목적이 있습니다.
foreach
을 위해 만들어 열거하는 항목에서 모음/배열입니다. using
편리한 건설을 확인 하기 위한 제대로 처리한 것은 귀하의 사용합니다.을 때에도 예외가 발생하는 예입니다.
의 유사성을 위한 이러한 두 개의 구문은 그냥,니다.할 수 있는 사람의 유사성(에서 아주 명백합니다:'그들은 모두에 키워드 C#')?
의 주요 차이점 foreach
고 using
는 foreach
사용되는 열거를 통해 IEnumerable
반면 using
사용되는 범위를 정의 밖에 있는 객체는 삭제됩니다.
거기에 하나의 유사성은 사 foreach
고 using
:자 구현 IDisposable
고 foreach
암시적으로 포장의 사용에 열거자 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);
}
}