「利回りリターン」の適切な使い方 質問する

「利回りリターン」の適切な使い方 質問する

収率キーワードはそのうちの1つですキーワードC# では、いまだに私を困惑させており、正しく使用しているかどうか自信が持てません。

次の 2 つのコードのうち、どちらが推奨されますか? また、その理由は何ですか?

バージョン1: yield return を使用する

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>();
    }
}

ベストアンサー1

yield returnリスト内の次の項目 (または次の項目のグループ) を計算するときによく使用します。

バージョン 2 を使用する場合、戻る前に完全なリストを取得する必要があります。 を使用するとyield return、戻る前に次の項目を取得するだけで済みます。

とりわけ、これは複雑な計算の計算コストをより長い時間枠にわたって分散するのに役立ちます。たとえば、リストが GUI に接続されていて、ユーザーが最後のページに移動しない場合は、リストの最後の項目を計算することはありません。

が適しているもう 1 つのケースyield returnは、 が無限集合を表す場合ですIEnumerable。素数のリスト、またはランダムな数の無限リストを考えてみましょう。IEnumerable一度にすべてを返すことはできないので、 を使用してyield returnリストを段階的に返します。

あなたの例では、製品の完全なリストがあるので、バージョン 2 を使用します。

おすすめ記事