2022年01月10日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!total 918 count

yield: 列挙可能なメソッドを自作しよう

Written By: 川俣 晶連絡先

この章のテーマ §

 yield return文、yield break文、列挙オブジェクトについて学びます。

前提知識 §

Console.WriteLineメソッド, 変数の基礎, メソッドの基礎, 条件演算子, int型, foreach文, ジェネリック

解説 §

 foreach文などで列挙できる対象は、通常配列などのコレクションです。

 しかし、列挙機能は簡単に自作できます。

 以下の条件を満たすメソッドを書くだけです。

  • 戻り値の型がIEnumerable<T> (Tは列挙する値の型)
  • yield return文で列挙する値を伝える
  • 途中で打ち切る時はyield breakを呼ぶ

 サンプルソースのDoubleCountメソッドは、この機能を用いて、1から順に2倍ずつ増えていく値を列挙します。そして、100を超えたらそこで列挙を打ち切ります。

罠の数々 §

  • この機能は実際にはSyntax Sugar(実際には存在しないが、ソースコード上では存在するように見せかける機能)である。そのため、一部の機能で制限を受けることがある。たとえば、in、ref、out パラメーターは使用できない
  • 正攻法でIEnumerable<T>インターフェースを実装するという実現方法もあるが、手間が掛かるのであまり見かけない

参考リンク §

反復子 (C#)

サンプルソース: kw_yield §

foreach (var item in DoubleCount())

{

    Console.WriteLine(item);

}

IEnumerable<int> DoubleCount()

{

    int a = 1;

    for(; ; )

    {

        if (a > 100) yield break;

        yield return a;

        a *= 2;

    }

}

実行結果 §

1

2

4

8

16

32

64

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

 以下のプログラムの実行結果を予測してみよう。

int yield = 1;

Console.WriteLine(yield);

  1. yieldは予約語だからエラーになる
  2. 列挙を始めてしまい、1,2,3……を出力する
  3. 1
  4. yieldのあとにreturnを書き足せば動く
  5. yieldのあとにbreakを書き足せば動く

[[解答]]

Facebook

キーワード【 川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!
【new_C#入門・全キーワード明快解説!】の次のコンテンツ
2022年
01月
11日
goto文: 悪魔の誘惑か最後の希望か
3days 0 count
total 1365 count
【new_C#入門・全キーワード明快解説!】の前のコンテンツ
2022年
01月
09日
クエリ式の基礎: LINQの2つの顔
3days 0 count
total 756 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20220110105219
サイトの表紙【new_C#入門・全キーワード明快解説!】の表紙【new_C#入門・全キーワード明快解説!】のコンテンツ全リスト 【new_C#入門・全キーワード明快解説!】の入手全リスト 【new_C#入門・全キーワード明快解説!】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.