C# 7.1 New Features
C# 7.0 was released as part of Visual Studio 2017 (version 15.0). While we work on C# 8.0, we will also ship features that are ready earlier as point releases.
C# 7.1 is the first such release. It will ship along with Visual Studio 2017 version 15.3. To try it out today, you can install Visual Studio Preview side-by-side, quickly and safely.
As you start using new C# 7.1 features in your code, a lightbulb will offer you to upgrade your project, either to “C# 7.1” or “latest”. If you leave your project’s language version set to “default”, you can only use C# 7.0 features (“default” means the latest major version, so does not include point releases).
Async Main
This makes it easier to get started with async code, by recognizing
static async Task Main() {...await some asynchronous code...}
Pattern-matching with generics
This allows using open types in type patterns. For example, case T t:
.
“default” literal
This lets you omit the type in the default operator (default(T)
) when the type can be inferred from the context. For instance, you can invoke void M(ImmutableArray<int> x)
with M(default)
, or specify a default parameter value when declaring void M(CancellationToken x = default)
.
Inferred tuple names
This is a refinement on tuple literals (introduced in 7.0) which makes tuple element names redundant when they can be infered from the expressions. Instead of writing var tuple = (a: this.a, b: X.Y.b)
, you can simply write var tuple = (this.a, X.Y.b);
. The elements tuple.a
and tuple.b
will still be recognized.