-
-
Notifications
You must be signed in to change notification settings - Fork 3.3k
Language Feature Roadmap
Siegfried Pammer edited this page Dec 5, 2021
·
6 revisions
Current language feature status of the master branch is detailed in #829. The following list shows all completed language versions.
- Language features that are checked are implemented in the current master branch of ILSpy and have a minimal test suite at least.
- Language features that are crossed out will likely never be implemented in the decompiler, either because
- they are not reproducible from compiled binaries (e.g. constant interpolated strings, Caller info attributes),
- or they are of limited use and would require too much work to implement in the decompiler (e.g. static and global using directives, expression bodied members).
- XmlDoc (see also #163)
- switch(string) (see
Switch
tag as well) - goto case -> #316
- params
- unsafe -> #924
C# 2 (VS 2005)
- Generics
-
Partial types: These are not applicable in decompiled code, as the code is decompiled into exactly one part. - Anonymous methods
- Iterators
- Nullable types ->
Nullable<T>
- Getter/setter separate accessibility
- Method group conversions (delegates)
- Co- and Contra-variance for delegates and interfaces
- Static classes
- Delegate inference
C# 3 (VS 2008)
- Implicitly typed local variables
- Object and collection initializers
- Auto-Implemented properties
- Anonymous types
- Extension methods
- Query expressions
- Lambda expression
- Expression trees
-
Partial methods: These are not applicable in decompiled code, as the code is decompiled into exactly one part.
C# 4 (VS 2010)
- Dynamic binding -> #154
- Named arguments -> #950
- Optional arguments -> #1083
- Generic co- and contravariance
-
Embedded interop types ("NoPIA"): TODO
C# 5 (VS 2012)
- Asynchronous methods
-
Caller info attributes: In general it's not possible to remove the compiler-generated values, because that would require us to produce the exact original source code.
C# 6 (VS 2015)
- Compiler-as-a-service (Roslyn)
-
Import of static type members into namespace: Currently, there are no plans to emitusing static
declarations. - Exception filters (see #761)
- Await in catch/finally blocks
- Auto property initializers
- Default values for getter-only properties
- Expression-bodied members
- Null propagator (null-conditional operator, succinct null checking)
- String interpolation (see #1012)
-
nameof operator: Similar to caller info attributes, this would require us to reproduce the exact source code. We could emitnameof
expressions in certain situations, e.g.throw new ArgumentException(nameof(parameter));
, but currently there are no plans to add this. - Dictionary initializer
- Allow 'Add' extension methods in collection initializers