2014-02-20 2 views
2

아래 코드에서 수율을 사용하여 값을 인쇄하는 방법과 단순한 목록 반복을 만드는 방법을 만들었습니다. 그래서 여기 내 질문에 두 방법에서 얻은 결과는 동일합니다 왜 우리가 수확 키워드에 갈까요? 또한 응용 프로그램에서 Yield 키워드의 정확한 사용법을 알려주십시오.수율 키워드의 정확한 사용법은 무엇입니까

코드 :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
namespace YieldKeyWordEg 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Animals obj = new Animals(); 
      Console.WriteLine("------ Using Yield ------"); 
      foreach (var item in obj.GetName()) 
      { 
       Console.WriteLine(item); 
      } 

      Console.WriteLine("------ Using List Iteration ------"); 
      foreach (var items in obj.GetNameinList()) 
      { 
       Console.WriteLine(items); 
      } 
      Console.ReadLine(); 
     } 
    } 
    class Animals 
    { 
     public IEnumerable<string> GetName() 
     { 
      List<string> objList = new List<string>(); 
      objList.Add("Cow"); 
      objList.Add("Goat"); 
      objList.Add("Deer"); 
      objList.Add("Lion"); 
      foreach (var item in objList) 
      { 
       yield return item; 
      } 
     } 
     public List<string> GetNameinList() 
     { 
      List<string> objList = new List<string>(); 
      objList.Add("Cow"); 
      objList.Add("Goat"); 
      objList.Add("Deer"); 
      objList.Add("Lion"); 
      return objList; 
     } 
    } 
} 

출력 :

------ Using Yield ------ 
Cow 
Goat 
Deer 
Lion 
------ Using List Iteration ------ 
Cow 
Goat 
Deer 
Lion 

답변

4

직선

MSDN에서 당신은 한 번에 각 요소를 반환 항복 return 문을 사용합니다. 수익률이 다시 올 때 iterator 메서드에서 turn 문에 도달하면 표현식이 반환되고 코드의 현재 위치가 유지됩니다. 다음 번에 iterator 함수가 호출 될 때 그 위치에서 실행이 재시작됩니다.

편집 : 는 세부 기사 this 시리즈를 참조하세요.

+0

실용적인 사용량 또는 그런 사용법에 대한 링크를 보여줄 수 있습니까? – szpic

+0

@szpic 편집을 참조하십시오. – Ehsan

+0

감사합니다. 또한이 링크를 사용하면 수율의 실제 사용법을 완전히 이해할 수 있습니다. [Click] (http://programmers.stackexchange.com/questions/97295/a-practical-use-of-yield-keyword-in-c) – szpic

0

예 :

public IEnumerable<MyClass> GetList() 
{ 
    foreach (var item in SomeList) 
    { 
      yield return new MyClass(); 
    } 
} 
2

그것은 이미 IEnumerable을 무언가를 포장 yield return를 사용하는 낭비입니다.

yield return이 아닌이 아닌 숫자를 IEnumerable로 래핑하는 데 사용할 수 있습니다. 이와 같은

:

public IEnumerable<string> GetNames() 
{ 
    yield return "Cow"; 
    yield return "Goat"; 
    yield return "Lion"; 
    yield return "Deer"; 
} 

또는 a tree traversal 같은 사실은 의미가 뭔가.

0

두 번째 예제의 목록은 아무 것도하지 않습니다. 반환하지 않으면 메서드의 끝에서 범위를 벗어날 때 가비지 수집됩니다. 이 예에서 yield의 관용구 사용은 다음과 같습니다.

관련 문제