The document discusses new features in C#2 for iterators and nullable types. It describes how C#2 introduced iterator blocks using the "yield" keyword to more easily implement iterators. This allows iterators to be defined without having to implement interfaces. The document also explains how C#2 introduced the Nullable type to allow value types to represent null values. It can be used with the ? syntax sugar and supports lifting operators to work with nullable types.