| Version | .Net Framework | Major Features | 
 
  | C# 1.0 | .NET Framework 1.0/1.1 | 
   ClassesStructsInterfacesEventsPropertiesDelegatesOperators
       and expressionsStatementsAttributes | 
 
  | C# 2.0   | .NET Framework 2.0
   | 
   GenericsPartial typesAnonymous methodsNullable value typesIteratorsCovariance and
       contravariance  | 
 
  | C# 3.0
   | .NET Framework version 3.5 | 
   Auto-implemented propertiesAnonymous typesQuery expressionsLambda expressionsExpression treesExtension methodsImplicitly typed local
       variablesPartial methodsObject and collection
       initializers  | 
 
  | C# 4.0
   | .NET Framework 4.0 | 
   Dynamic bindingNamed/optional argumentsGeneric covariant and
       contravariantEmbedded interop types  | 
 
  | C# 5.0   | .NET Framework 4.5 | 
   Asynchronous membersCaller info attributes | 
 
  | C# 6.0   | .NET Framework 4.6   | 
   Static importsException filtersAuto-property initializersExpression bodied membersNull propagatorString interpolationnameof operatorIndex initializersAwait in catch/finally
       blocksDefault values for
       getter-only properties | 
 
  | C# 7.0   | .NET Core 2.0 | 
   Out variablesTuples and deconstructionPattern matchingLocal functionsExpanded expression bodied
       membersRef locals and returnsDiscardsBinary Literals and Digit
       SeparatorsThrow expressions  | 
 
  | C# 8.0   | .NET Core 3.0   | 
   Readonly membersDefault interface methodsPattern matching
       enhancements:Switch expressionsProperty patternsTuple patternsPositional patternsUsing declarationsStatic local functionsDisposable ref structsNullable reference typesAsynchronous streamsIndices and rangesNull-coalescing assignmentUnmanaged constructed typesStackalloc in nested
       expressionsEnhancement of interpolated
       verbatim strings  | 
 
  | C# 9.0   | .NET 5.0 | 
   RecordsInit only settersTop-level statementsPattern matching
       enhancementsPerformance and interopNative sized integersFunction pointersSuppress emitting localsinit
       flagFit and finish featuresTarget-typed new expressionsstatic anonymous
       functionsTarget-typed conditional
       expressionsCovariant return typesExtension GetEnumerator support
       for foreach loopsLambda discard parametersAttributes on local
       functionsSupport for code generatorsModule initializers  | 
 
  | C#10.0 | .NET 6.0   | 
   Record structsImprovements of structure
       typesInterpolated string handlersglobal using directivesFile-scoped namespace
       declarationExtended property patternsImprovements on lambda
       expressionsAllow const interpolated
       stringsRecord types can
       seal ToString()Improved definite assignmentAllow both assignment and
       declaration in the same deconstructionAllow AsyncMethodBuilder attribute
       on methodsCallerArgumentExpression
       attributeEnhanced #line pragma  |