개발관련/other

'yield return'의 적절한 사용법

Rateye 2022. 1. 17. 11:59
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
반응형