1. ホーム
  2. c#

[解決済み] 普通の IEnumerable を使用することができるのに、なぜ yield キーワードを使用するのですか?

2022-04-23 15:25:58

質問

このコードが与えられた。

IEnumerable<object> FilteredList()
{
    foreach( object item in FullList )
    {
        if( IsItemInPartialList( item ) )
            yield return item;
    }
}

なぜこのようにコーディングしてはいけないのでしょうか?

IEnumerable<object> FilteredList()
{
    var list = new List<object>(); 
    foreach( object item in FullList )
    {
        if( IsItemInPartialList( item ) )
            list.Add(item);
    }
    return list;
}

の内容はなんとなくわかりますが yield というキーワードがあります。 これはコンパイラにある種のもの(イテレータ)を構築するように指示するものです。 しかし、なぜそれを使うのでしょうか? コードが若干少なくなることを除けば、それが何の役に立つのか?

どのように解決するのか?

使用方法 yield は、コレクションを を遅延させる。

最初の5つの項目だけが必要だとしましょう。 あなたのやり方だと リスト全体 を取得することができます。 とは yield のように、最初の5つの項目だけをループしています。