2012-11-23 4 views
0

함수가 끝나거나 함수를 끝내는 것과 다른 어떤 것도 수행합니까? 참고 VB.NET에는 수확 틈이 없지만이 함수는 반복자 키워드로 표시되어야합니다.yield break in C#

+0

도 볼 http://stackoverflow.com/questions/231893/what-does-yield-break-do-in-c –

+0

아니 그 예를하지만이 경우 설명하지 않습니다 무엇 수율 휴식 말 함수가 자연스럽게 종료되도록하는 단순한 반환과의 차이입니다. – bradgonesurfing

답변

2

C#에 대해 말하기, 소스가 null이거나 비어있는 경우 아무 것도 반환하지 않는 반복기를 작성하려는 경우.

public IEnumerable<T> EnumerateThroughNull<T>(IEnumerable<T> source) 
{ 
    if (source == null) 
     yield break; 

    foreach (T item in source) 
     yield return item; 
} 

그것은 yield break없이 반복자 내부에 빈 집합을 반환하는 것은 불가능하게된다 예를 들면 다음과 같습니다. 또한 iterator가 끝났음을 지정합니다. 값을 반환하지 않는 return 문으로 yield break을 생각할 수 있습니다.

int i = 0; 
while (true) 
{ 
    if (i < 5)  
     yield return i; 
    else    
     yield break; // note that i++ will not be executed after this statement 
    i++; 
}  
+1

yield break는 그 시점에서 열거를 끝냅니다. 복잡한 내부 상태를 갖는보다 복잡한 열거 형은 매우 유용 할 수 있습니다. 그러나이 대답이 암시 하듯이이 사용 사례는 필요하지 않습니다. 간단한 if (source! = null) {foreach .....}는 yield break없이 null에서 빈 열거 형을 반환합니다. – SAJ14SAJ

+1

첫 번째 의견을 쓰는 동안 답변이 수정되었습니다. 첫 번째 사례에 대한 의견이 적용됩니다. 두 번째는 yield break가 가독성을 높이는보다 복잡한 상태의 예입니다. 그러나 다시 말하면, 그것 없이는 불가능하지 않습니다. 두 번째 예제의 else 문에서 yield break를 간단한 break로 변경하고, 루프를 벗어나 함수의 자연적인 끝으로 이동하면 열거도 종료됩니다. – SAJ14SAJ

+1

나는 답이 그것이 필요하지 않다라고 생각한다. 함수가 자연스럽게 완료되도록하는 것은 또한 괜찮습니다. yield break와 동일합니다. – bradgonesurfing