Some of the new language features are independent of the new CLR version. For example, you can use some C # 3.0 features when targeting .NET 2.0 (extension methods, lambda expressions, object initializers, or even query syntax if you provide an implementation for Linq operators, such as LinqBridge). These functions depend only on the compiler, and not on the CLR (in .NET 3.5 the CLR is the same as in .NET 2.0).
Likewise, covariance and contravariance are independent of the .NET 4.0 CLR, they are an exclusively language feature, so you can use in / out modifiers when setting up .NET 3.5. Dynamic typing, on the other hand, is dependent on the DLR (Dynamic Language Runtime) that ships with .NET 4.0, so you cannot use dynamic when targeting 3.5
source share