C# ListのPredicate

ジェネリッククラスの検索(Find)

class Hoge
{
  private int _id = 0;
  private int _year = 0;
  private int _month = 0;

  public int Id
  {
    get {return this._id;}
    set {this._id = value;}
  }

  public int Year
  {
    get {return this._year;}
    set {this._year = value;}
  }

  public int Month
  {
    get {return this._month;}
    set {this._month = value;}
  }
}

class Main
{
  Hoge hoge1 = new Hoge();
  hoge1.Id = 1;
  hoge1.Year = 2006;
  hoge1.Month = 5;
  Hoge hoge2 = new Hoge();
  hoge2.Id = 2;
  hoge1.Year = 2006;
  hoge1.Month = 12;
  List<Hoge> list = new List<Hoge>();
  list.Add(hoge1);
  list.Add(hoge2);

  DateTime date = DateTime.Now;
  for (int i = 0;i < 12;i++)
  {
    Date date1 = date.AddMonth(i);
    Hoge hoge = list.Find(delegate(Hoge item) { 
                     return (item.Year == date1.Year && item.Month == date1.Month); 
                });
    if (hoge!=null)
    {
      //OK
    } else {
      //NG
    }
  }
  

}