static void Main() { var list0 = new List <TextCell> { new TextCell { Text = "A" }, new TextCell { Text = "Aa" }, new TextCell { Text = "Ab" }, new TextCell { Text = "Ac" }, new TextCell { Text = "Abb" }, new TextCell { Text = "B" }, new TextCell { Text = "Ba" }, new TextCell { Text = "Bg" }, new TextCell { Text = "Bd" }, new TextCell { Text = "Ba", Detail = "det" }, new TextCell { Text = "Br" }, new TextCell { Text = "C" }, new TextCell { Text = "Cc" }, new TextCell { Text = "C" }, }; //List<IGrouping<string, TextCell>> var list1 = list0.OrderBy(c => c.Text).GroupBy(c => c.Text[0].ToString(), c => c).Select(i => new Grouper <string, TextCell> { Item = i }).ToList(); //list1;//.Select( g = new Typle<string, TextCell>()) return; for (var i = 0; i < 20; i++) { Console.WriteLine(i % 5); } Console.Read(); return; var visitor = new PersonVisitor(); var child = new Child(); var teenager = new Teenager(); var person = new Person(); var date = new DateTime(); var list = new List <string>(); var obj = new object(); visitor.Visit(child); visitor.Visit(teenager); visitor.Visit(person); visitor.Visit(date); visitor.Visit(list); visitor.Visit(obj); child.Visit(); teenager.Visit(); person.Visit(); date.Visit(); Console.Read(); }