This short course covers the latest and greatest features of C#, covering versions 7, 7.1, 7.2, 7.3, 8.0, 9.0 and 10.0 of the language that are being sim-shipped with corresponding Visual Studio updates.
Course Topics
Here's every language feature presented in this course, grouped by the version of the C# language.
C# 7:
Out Variables
Pattern Matching (is and switch expressions)
Tuples and Tuple Deconstruction
Local Functions
Ref Returns and Locals
Expression Bodied Members
Throw Expressions
Generalized Async Return Types
Literal Improvements
C# 7.1:
How to turn on C# 7.1 support
Async Main
Default Expressions
Ref Assemblies
Infer Tuple Names
Pattern-Matching with Generics
C# 7.2:
Leading Digit Separators
'Private Protected' Access Modifier
Non-Trailing Named Arguments
Reference Semantics on Value Types:
'In' Parameters
'Ref Readonly' Variables
'Ref Struct' and Span<T>
C# 7.3:
Performance improvements
Access fixed fields without pinning
Reassign ref local variables
Use initializers on stackalloc arrays
Use fixed statements on any type that supports a pattern
Enhancements to existing features
Tuple == and != support
Use expression variables in more locations
Attach attributes to backing field of auto-properties
Improved method resolution when arguments differ by 'in'
Improved overload resolution
New compiler options:
deterministic
publicsign
pathmap
C# 8:
Nullable Reference Types
Indices and Ranges
Default Interface Members
Pattern Matching
C# 9:
Record Types
Top-Level Calls
Initial Setters
Pattern Matching Improvements (type patterns, parenthesized patterns, conjunctive and, disjunctive or, negated not, relational patterns)
Performance and Interop (Native sized integers (nint/nuint), function pointers, SkipLocalsInit)
Fit and Finish (target-typed new, target type resolution of conditional expressions, static modifier for lambda expressions and anonymous methods, covariant return types, foreach GetEnumerator() use, discards as parameters to lambdas, attributes on local functions)
C# Code Generators (partial method syntax, module initializers)
C# 10:
Record Structs
Global Using Directives
File-Scoped Namespace Declarations
Extended Property Patterns
Generic Attributes
Lambda Improvements (attributes, explicit return types, natural type inference)
Enhanced #line directives
Prerequisites
Knowledge and understanding of C# 6 and earlier
General experience in .NET/C# application development
Learning Outcomes
An understanding and appreciation of latest C# 7/7.1/7.2/7.3/8/9 language features
Understanding of how to convert existing C# code to C# 7/7.1/7.2/7.3/8/9