C# Evolution
Without promising exact timelines for individual features, our goal is to try and support all new C# language changes introduced by Microsoft for the closest upcoming release after they have been finalized, often before and sometimes shortly after they have shipped in Visual C#. Of course details depend on the timelines for both Microsoft's releases and ours.
Feature status for Microsoft's Visual C# 11 is tracked here. New features listed without a bug id are pending review of feasibility for RemObjects C# and/or awaiting more official status from Microsoft while the C# 11 they are slated for is still in development...
Where applicable, we support new language features for all platforms and for all .NET target frameworks (while in Visual C#, many new features are only supported on .NET Core).
C# vNext
- Semi-auto-properties bugs://E26056
- Params
Span<
T> + Stackalloc any array type bugs://E26058 - nameof accessing instance members bugs://E26059
- Default in deconstruction bugs://E26055
- Roles/Extensions
- Interceptors
C# 12
Based on this page
- Primary Constructors bugs://E26057
- Lambda default parameters done .2817
- Collection Expressions bugs://E26775
- Alias any type no action needed
- Inline Arrays bugs://E26777
C# 11
- file-local-types done .2817
- ref-fields bugs://E26040
- Required members (and here) bugs://E26037
- DIM for static members bugs://E26041
- Numeric IntPtr no action needed
- Unsigned Right Shift done .2817
- UTF-8 String Literals bugs://E26044
- Pattern matching on
ReadOnlySpan<char>
bugs://E26046 - Checked Operators bugs://E26047
- auto-default structs no action needed
- Newlines in Interpolation done .2817
- List Patterns bugs://E26050
- Raw String Literals bugs://E26036
- Cache delegates for static method group no action needed
- nameOf(parameter) done .2817
- Relaxing Shift Operator bugs://E26053
- Generic Attributes (same as in bugs://E25464?)
These features seem to have dissappeared from the official plans, but have been covered for RemObjects C#
- Relax ordering of
ref
andpartial
modifiers no action needed - Top Level statement attribute specifiers done .2817
C# 10
- record-structs done .2695
- parameterless-struct-constructors always was supported
- globalusingdirective done .2695
- file-scoped-namespaces done .2683
- extended-property-patterns done .2695
- improved-interpolated-strings bugs://E25461 (might not implement)
- constant_interpolated_strings done .2683
- lambda-improvements done .2693
- caller-argument-expression done .2683
- enhanced-#line-directives done .2695 (Also Oxygene)
- generic-attributes done .2695
- improved-definite-assignment always was supported
- async-method-builders always was supported
C# 9
- Records done .2611 (all languages)
- top-level-statements done .2625
- pattern-matching changes done .2653
- init done .2575
- target-typed-new done .2571
- module-initializers done .2653 (all languages and platforms)
- extending-partial-methods done .2633 (when declared in C#, only)
- static-anonymous-functions done .2617 (C# and Oxygene)
- target-typed-conditional-expressions done .2621 (all languages)
- covariant-returns done .2609 (all applicable languages)
- extension-getenumerator #85650 (we support
GetSequence
already) - lambda-discard-parameters done .2609 (all applicable languages)
- local-function-attributes done .2621 (all applicable languages)
- native-integers done .2623 (all languages already supported IntPtr as true native int)
- function-pointers # done .2635 (see also
[FunctionPointer]
) - skip-localsinit done
- unconstrained-type-parameter-annotations #85655
C# 8
- patterns bugs://E25269
- default-interface-methods – was already implemented for all languages in v10.
- async-streams done .2667
- ranges done
- enhanced using done
- static-local-functions done, v10
- null-coalescing-assignment done, v10
- readonly-instance-members done
- nested-stackalloc always was supported
Status for these seems unclear on Microsoft'a side:
- nullable-reference-types-specification #82380
- nullable-reference-types & here #82380
C# 7.3
- blittable done .2299
- indexing-movable-fixed-fields always was supported
- pattern-based-fixed done .2667
- ref-local-reassignment done .2299
- stackalloc-array-initializers done .2663
- auto-prop-field-attrs done .2299
- expression-variables-in-initializers always was supported
- tuple-equality done .2299
- improved-overload-candidates done (we always had that)
C# 7.2
- readonly-ref done .2297
- span-safety done .2695
- non-trailing-named-arguments done .2299
- private-protected done, v10
- conditional-ref done .2299
- leading-separator done
C# 7.1
Elements .2295 and later is fully up to date with C# 7.1.
- async-main done, v10 (Oxygene, Swift and Java too)
- target-typed-default done, v10
- infer-tuple-names done .2299
- generics-pattern-match always was supported
C# 7.0
- pattern-matching bugs://E25276
- local-functions done, v10 (Oxygene too)
- out-var done, v10 (Oxygene too)
- throw-expression done, v10 (Oxygene, Swift ands Java too)
- binary-literals done, 9.0
- digit-separators done, 9.0
- task-types done .2663