Open dgrunwald opened 7 years ago
:bulb: I noticed you have nameof
operator crossed out. While this is typically not possible due to lack of information in the compiler output, it would be good to support it in limited cases, such as the paramName
argument for ArgumentException
and derived types, which is likely to align with the name of a parameter visible in the current scope.
:bulb: I noticed you have Caller Info attributes crossed out. While this is typically not possible, one way it could be leveraged is intentionally omitting arguments (and allowing defaults to apply) in cases where the IL passes literal arguments which are known to align with the actual values that would be inserted by these attributes. The CallerMemberNameAttribute
would work without additional considerations. If other information is desired, the #line
directive could be used to set the file name and line number for the call site.
Here we list recent C# language versions (> C# 6) and their implementation status in ILSpy. Older (completed) language versions can be found in the wiki.
C# 12 (VS 2022 17.8)
Interceptors (experimental feature)nameof accessing instance membersUsing aliases for any typeExperimental attributeC# 11 (VS 2022 17.4)
ReadOnlySpan<char>
auto-default structsNewlines in interpolationsRaw string literalsnameof(parameter)Relax ordering ofref
andpartial
modifiersC# 10 (VS 2022 17.0)
Global Using Directive: Currently there are no plans to support this in the decompiler, as it is of limited use.Constant Interpolated Strings: These are irreproducible.Source Generator V2 APIs: There is nothing we could do.Enhanced: These are irreproducible.#line
directiveCaller expression attribute: These are irreproducible.C# 9 (VS 2019 16.8)
Target-typed new: Currently we have no plans to implement this feature, just like we (almost) never emitvar
, unless anonymous types are usedStatic lambdas: Currently we have no plans to implement this feature.Extending Partial: These are irreproducible.Top-level statements: We have no plans to support this feature as it would add a lot of complexity to the ILSpy UI as well as the decompiler. "Top level functions/free functions" from IL are already supported: they are located in the synthesized<Module>
type, similarly C# top level statements are located in the synthesizedProgram
type.C# 8.0 (Visual Studio 2019)
await foreach
using var ... = ...;
)await using
Alternative interpolated verbatim strings: There are no plans to support this feature. Note that we don't ever emit verbatim strings.C# 7.3 (Visual Studio 2017 version 15.7)
System.Enum
,System.Delegate
andunmanaged
constraints.= ref
).Span<int> x = stackalloc[] { 1, 2, 3 };
.fixed
statement: Types that implement a suitableGetPinnableReference
can be used in afixed
statement.out var
and pattern variables are allowed in field initializers, constructor initializers, and LINQ queries.==
and!=
. -> #1822[field: …]
attributes on an auto-implemented property to target its backing field.C# 7.2 (Visual Studio 2017 version 15.4)
Digit separator after base specifier: Currently, we have no plans to add support for this.C# 7.1 (Visual Studio 2017 version 15.3)
Inferred tuple element names: There is no need for the decompiler to infer tuple names, the compiler already embeds these in the assembly metadata.C# 7.0 (Visual Studio 2017)
Binary Literals: Currently, we have no plans to add support for this.Digit Separators: Currently, we have no plans to add support for this.More expression-bodied members: We have no plans to add more places, where we emit expression-bodied members. Getter-only properties are currently the only case.