As of my knowledge cutoff in September 2021, here are some notable features that were introduced in C#:
- C# 7.0:
- Tuples: Allows grouping multiple values together in a single object.
- Pattern matching: Enhances switch statements to perform pattern-based matching.
- Local functions: Enables defining functions within other functions.
- Out variables: Simplifies the declaration and usage of out parameters.
- C# 7.1:
- Async Main: Allows the entry point of a program to be asynchronous.
- Default literal expressions: Enables the use of default(T) to get the default value of a type T.
- Pattern matching with generics: Extends the pattern matching capabilities to work with generics.
- C# 7.2:
- Non-trailing named arguments: Allows passing named arguments in any order, even if they are not at the end of the argument list.
- Leading underscores in numeric literals: Supports the use of underscores (_) as a visual separator in numeric literals.
- In parameters: Introduces the in keyword to specify that a method parameter is read-only.
- C# 7.3:
- Improved support for Span<T>: Enhances the Span<T> type with additional APIs for working with arrays and memory buffers more efficiently.
- Ref locals and returns: Allows returning or assigning references to local variables.
- C# 8.0:
- Nullable reference types: Adds support for annotating reference types as nullable or non-nullable, enabling better null safety.
- Async streams: Introduces the IAsyncEnumerable<T> interface for asynchronously streaming sequences of data.
- Default interface methods: Enables defining default implementations for interface members.
- Switch expressions: Enhances the switch statement to support returning a value as an expression.
- Ranges and indices: Introduces the Range and Index types to simplify working with subsets of collections.
- C# 9.0:
- Init-only properties and records: Allows properties to be set only during object initialization, enhancing the immutability of objects.
- Top-level programs: Enables writing simple programs without requiring a class or Main method.
- Improved pattern matching: Introduces new patterns, including relational patterns and logical patterns.
- Function pointers: Adds support for function pointers and native calling conventions.
Please note that C# has continued to evolve beyond my knowledge cutoff, and there may have been additional features introduced in later versions. It’s always a good idea to consult the official Microsoft documentation or other up-to-date resources for the latest information on C# features.