2008年10月23日

「The power of closures in C# 2.0」をC#3.0に

   このエントリーをはてなブックマークに追加 Clip to Evernote
The power of closures in C# 2.0にあるコードをC#3.0で書き換えてみた。

// コード1
public IEnumerable<Employee> Managers(IEnumerable<Employee> emps) {
    return emps.Where(e => e.IsManager);
}

// コード2
public IEnumerable<Employee> HighPaid(IEnumerable<Employee> emps) {
    int threshold = 150;
    return emps.Where(e => e.Salary > threshold);
}

// コード3
public Predicate<Employee> PaidMore(int amount) {
    return (e => e.Salary > amount);
}

private void Hoge() {
    // 確認のためのコード
    var emps = new List<Employee> {
        new Employee { Name = "John", IsManager = true, Salary = 200, },
        new Employee { Name = "Mike", IsManager = false, Salary = 170, },
        new Employee { Name = "Joe", IsManager = false, Salary = 140, },
    };

    Managers(emps).ToList().ForEach(Console.WriteLine);
    Console.WriteLine();
    HighPaid(emps).ToList().ForEach(Console.WriteLine);
    Console.WriteLine();

    // コード4
    Predicate<Employee> highPaid = PaidMore(150);
    Console.WriteLine(highPaid(emps[0]));
}


// 確認のためのEmployeeクラス
class Employee {
    public bool IsManager { get; set; }
    public int Salary { get; set; }
    public string Name { get; set; }
    public override string ToString() {
        return string.Format("{0} {1} {2}", Name, IsManager, Salary);
    }
}



どちらかと言うと、上記ページに書いてあるrubyの方に似てますね。


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/51664926
この記事へのトラックバック
override+cに関するブログをまとめています。
override+c-でつながるブログリング【blogring.org】at 2008年12月08日 06:45