Оглавление Предисловие 19 Благодарности 20 Об этой книге 21 Об авторе 25 Часть I. Подготовка к путешествию 27 Глава 1. Изменение стиля разработки в C# 28 Глава 2. Язык C# как основа всех основ 54 Часть II. C# 2: решение проблем, присущих C# 1 83 Глава 3. Параметризованная типизация с использованием обобщений 85 Глава 4. Типы, допускающие значения null 133 Глава 5. Оперативно о делегатах 162 Глава 6. Простой способ реализации итераторов 188 Глава 7. Заключительные штрихи C# 2: финальные возможности 212 Часть III. C# 3: революционные изменения в доступе к данным 237 Глава 8. Отбрасывание мелочей с помощью интеллектуального компилятора 239 Глава 9. Лямбда-выражения и деревья выражений 265 Глава 10. Расширяющие методы 295 Глава 11. Выражения запросов и LINQ to Objects 319 Глава 12. LINQ за рамками коллекций 363 Часть IV. C# 4: изящная игра с другими 407 Глава 13. Небольшие изменения, направленные на упрощение кода 408 Глава 14. Динамическое связывание в статическом языке 447 Часть V. C# 5: упрощение асинхронности 501 Глава 15. Асинхронность с помощью async/await 502 Глава 16. Дополнительные средства C# 5 и заключительные размышления 559 Приложение A. Стандартные операции запросов LINQ 567 Приложение Б. Обобщенные коллекции в .NET 581 Приложение В. Итоговые сведения по версиям 596 Предметный указатель 605