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.
This page is driven by C# features and proposals as documented by Microsoft on this page. It is up to date as of now with C# 10.0 as released November 2021, and forward-looking towards C# 11.
C# 11.0
New features proposed for C# 11. Where applicable, we support new features for all platforms and for all .NET target frameworks (while in Visual C#, many new features are only supported on .NET Core 5.0 and later).
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 C# 11 is still in development...
- file-local-types bugs://E26035
- ref-fields bugs://E26040
- DIM for static members bugs://E26041
- Numeric IntPtr bugs://E26042 (might already be covered by C#10 changes)
- Unsigned Right Shift bugs://E26043
- UTF-8 String Literals bugs://E26044
- Pattern matching on
ReadOnlySpan<char>
bugs://E26046 - Checked Operators bugs://E26047
- auto-default structs bugs://E26048
- Newlines in Interpolation bugs://E26049
- List Patterns bugs://E26050
- Raw String Literals bugs://E26036
- Cache delegates for static method group bugs://E26051
- nameOf(parameter) bugs://E26052
- Relaxing Shift Operator bugs://E26053
- Relax ordering of
ref
andpartial
modifiers bugs://E26054 - Generic Attributes (same as in bugs://E25464?)
- Default in deconstruction bugs://E26055
- Semi-auto-properties bugs://E26056
- Required members bugs://E26037
- Top Level statement attribute specifiers bugs://E26038
- Primary Constructors bugs://E26057
- Params
Span<
T> + Stackalloc any array type bugs://E26058 - nameof accessing instance members bugs://E26059
- Lambda default parameters bugs://E26060
C# 10.0
- 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.0
- 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.0
- 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