イテレータと yield

using System;
using System.Collections;
using System.Collections.Generic;

public class Program
{
    /// <summary>
    /// このプログラムのメイン・エントリポイントです。
    /// </summary>
    public static void Main()
    {
        // 列挙可能な文字列を生成します
        EnumarableStrings strings = new EnumarableStrings(new string[] {"1", "2", "3"});

        // 文字列を列挙して表示します
        foreach (string s in strings)
        {
            Console.WriteLine(s);
        }
    }
}

/// <summary>
/// 列挙可能な文字列をあらわします。
/// </summary>
public class EnumarableStrings : IEnumerable<string>
{
    /// <summary>
    /// コンストラクタ。
    /// </summary>
    public EnumarableStrings(string[] strings)
    {
        this._strings = strings;
    }

    /// <summary>
    /// インターフェイスメンバの実装。
    /// </summary>
    /// <returns></returns>
    public IEnumerator<string> GetEnumerator()
    {
        foreach (string str in this._strings)
        {
            yield return str;
        }
    }

    /// <summary>
    /// 明示的なインターフェイスの実装につき、修飾子 public 等はつけられない。
    /// </summary>
    /// <returns></returns>
    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }


    #region Private members...

    /// <summary>列挙する文字列のリスト。</summary>
    private readonly IList _strings;

    #endregion
}



広告 C#

イベント、デリゲート、ラムダ式

using System;

public class Program
{
    /// <summary>
    /// このアプリケーションのメイン・エントリポイントです。
    /// </summary>
    public static void Main()
    {
        // イベントハンドラを宣言
        EventHandler handler;
        // イベントハンドラをラムダ式で生成
        handler = (sender, e) => { Console.WriteLine("Did it."); };

        // イベントにハンドラを割り当て
        Program.doIt += handler;
        // イベント発火
        Program.doIt(null, EventArgs.Empty);
    }
        
    /// <summary>イベント宣言。</summary>
    private static event EventHandler doIt;
}



広告 C#