-
-
Notifications
You must be signed in to change notification settings - Fork 3.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
C# language support status #829
Comments
💡 I noticed you have |
💡 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 |
|
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!=
. -> Tuples comparison question #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.The text was updated successfully, but these errors were encountered: