728x90
반응형
질문 : '수익률'의 적절한 사용
yield 키워드는 계속해서 나를 미혹시키는 C #의 키워드 중 하나이며 올바르게 사용하고 있다고 확신 한 적이 없습니다.
다음 두 가지 코드 중 선호되는 코드와 이유는 무엇입니까?
버전 1 : 수익률 사용
public static IEnumerable<Product> GetAllProducts()
{
using (AdventureWorksEntities db = new AdventureWorksEntities())
{
var products = from product in db.Product
select product;
foreach (Product product in products)
{
yield return product;
}
}
}
버전 2 : 목록 반환
public static IEnumerable<Product> GetAllProducts()
{
using (AdventureWorksEntities db = new AdventureWorksEntities())
{
var products = from product in db.Product
select product;
return products.ToList<Product>();
}
}
답변
나는 목록의 다음 항목 (또는 다음 항목 그룹)을 계산할 때 yield-return을 사용하는 경향이 있습니다.
버전 2를 사용하는 경우 반환하기 전에 전체 목록이 있어야합니다. yield-return을 사용하면 반환하기 전에 다음 항목 만 있으면됩니다.
무엇보다도 이것은 복잡한 계산의 계산 비용을 더 큰 기간에 걸쳐 분산시키는 데 도움이됩니다. 예를 들어 목록이 GUI에 연결되어 있고 사용자가 마지막 페이지로 이동하지 않는 경우 목록의 최종 항목을 계산하지 않습니다.
yield-return이 바람직한 또 다른 경우는 IEnumerable이 무한 집합을 나타내는 경우입니다. 소수 목록 또는 무한한 난수 목록을 고려하십시오. 한 번에 전체 IEnumerable을 반환 할 수 없으므로 yield-return을 사용하여 목록을 점진적으로 반환합니다.
특정 예에서 전체 제품 목록이 있으므로 버전 2를 사용합니다.
출처 : https://stackoverflow.com/questions/410026/proper-use-of-yield-return
728x90
반응형
'개발관련 > other' 카테고리의 다른 글
Vim에 텍스트를 붙여 넣을 때 자동 들여 쓰기 끄기 (0) | 2022.03.26 |
---|---|
빈 Pandas DataFrame을 만든 다음 채우는 방법 (0) | 2022.01.17 |
.NET Framework에서 Math.Pow ()를 구현하는 방법 (0) | 2022.01.17 |
vim "write with sudo"의 작동 원리 (0) | 2022.01.06 |
Scala vs Groovy vs Clojure (0) | 2022.01.06 |