の収率キーワードはそのうちの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 を使用します。