Back to Roslyn

Working Set C#

docs/Language Feature Status.md

11.0.10048.7 KB
Original Source

Language Feature Status

This document reflects the status, and planned work in progress, for the compiler team. It is a live document and will be updated as work progresses, features are added / removed, and as work on feature progresses. This is not an exhaustive list of our features but rather the ones which have active development efforts behind them.

The "Feature" column contains a link to the championed proposal or doc for the feature.
The "State" column contains a link to the test plan issue for the feature. The test plan should have a "Feature - XYZ" label, which is also used on PRs and issues for the feature.

Working Set C#

Merged features should be in the bottom portion of the table (in descending order from earliest to latest merged), while in-progress features should be in the top portion of the table.
When a feature is merged to the main branch, its entry should be moved to the bottom of the table and its "State" value should be updated to record the relevant version number.

FeatureBranchStateDeveloperReviewerIDE BuddyLDM Champ
Dictionary expressionsdictionary-expressionsIn progress333fredCyrusNajmabadi, jcouvCyrusNajmabadiCyrusNajmabadi
UnionsUnionsIn ProgressAlekseyTsRikkiGibson, jjonesczTBDMadsTorgersen
Closed class hierarchiesclosed-classIn progressRikkiGibsonAlekseyTs, jjonesczTBDmattwar
Unsafe evolutionUnsafeEvolutionIn progressjjonescz333fred, jcouvTBDagocke
Extension indexersextensionsIn progressjcouvAlekseyTs, CyrusNajmabadiCyrusNajmabadijcouv
ExtendedLayoutAttributemainMerged into 18.3jkoritzinsky333fred, jcouv
Runtime Asyncruntime-async-streamsMain feature merged into main in preview333fredjcouv, RikkiGibson
Collection expression argumentscollection-expression-argumentsMerged into .NET 11 p1 and VS 18.4CyrusNajmabadi333fred, jcouvCyrusNajmabadiCyrusNajmabadi

Working Set VB

C# 14.0

FeatureBranchStateDeveloperReviewerIDE BuddyLDM Champ
field keyword in propertiesfield-keywordMerged into 17.12p3Youssef1313, cston333fred, RikkiGibsonCyrusNajmabadiCyrusNajmabadi
First-class Span TypesFirstClassSpanMerged into 17.13p1jjonesczcston, 333fred333fred, stephentoub
Unbound generic types in nameofPRMerged into 17.13p2CyrusNajmabadijcouv, AlekseyTsCyrusNajmabadiCyrusNajmabadi
String literals in data section as UTF8PRMerged into 17.13p4jjonesczAlekseyTs, cstonN/AN/A
Simple lambda parameters with modifiersPRMerged into 17.14p1CyrusNajmabadijjonescz, cstonCyrusNajmabadiCyrusNajmabadi
Partial Events and ConstructorsPartialEventsCtorsMerged into 17.14p3jjonesczcston, RikkiGibsonCyrusNajmabadijaredpar
ExtensionsextensionsMerged into 17.14p3jcouv, AlekseyTsjjonescz, TBDCyrusNajmabadiMadsTorgersen
Null-conditional assignmentnull-conditional-assignmentMerged into 17.14p3RikkiGibsoncston, jjonesczCyrusNajmabadiRikkiGibson
Ignored directivesPRMerged into 17.14p3jjonesczRikkiGibson, jaredparCyrusNajmabadijaredpar
User Defined Compound Assignment OperatorsUserDefinedCompoundAssignmentMerged to mainAlekseyTs333fred, cstonCyrusNajmabadiAlekseyTs
Optional and named arguments in Expression treesPRMerged to main(https://github.com/dotnet/roslyn/issues/76934)cston333fred, AlekseyTsCyrusNajmabadicston

VB in .NET 10

FeatureBranchStateDeveloperReviewerIDE BuddyLDM Champ
Recognizing 'unmanaged' constraintmainMerged into 17.13 P2AlekseyTscston, 333fred(no IDE impact)jaredpar
Overload Resolution PrioritymainMerged into 17.13 P3AlekseyTs333fred, cston(no IDE impact)333fred

C# 13.0

FeatureBranchStateDeveloperReviewerIDE BuddyLDM Champ
Escape characterN/AMerged into 17.9p1CyrusNajmabadijcouv, RikkiGibson(no IDE impact)CyrusNajmabadi
Method group natural type improvementsmainMerged into 17.9p2jcouvAlekseyTs, cston(no IDE impact)jcouv
Lock objectLockObjectMerged into 17.10p2jjonesczcston, RikkiGibsonCyrusNajmabadi (needs IDE fixer)stephentoub
Implicit indexer access in object initializersmainMerged into 17.9p3jcouvAlekseyTs, cston(no IDE impact)
Params-collectionsmainMerged to 17.10p3AlekseyTsRikkiGibson, 333fredakhera99 (needs IDE fixer)MadsTorgersen, AlekseyTs
Ref/unsafe in iterators/asyncRefInAsyncMerged into 17.11p2jjonesczAlekseyTs, cston(no IDE impact)
Overload Resolution PrioritymainMerged to 17.12p1333fredjcouv, cstonNot yet assigned333fred
Partial propertiespartial-propertiesMerged into 17.11p3RikkiGibsonjcouv, 333fredCosifne333fred, RikkiGibson
Ref Struct Interfaces/allows ref struct constraintRefStructInterfacesMerged into 17.11p2AlekseyTscston, jjonesczToddGrunagocke, jaredpar
Collection expression better conversion from expressionmainMerged into 17.12p3333fredcston, AlekseyTs(no IDE impact)333fred, CyrusNajmabadi

C# 12.0

FeatureBranchStateDeveloperReviewerLDM Champ
ref readonly parametersRefReadonlyMerged into 17.8p2jjonesczjcouv, AlekseyTsakhera99
Collection ExpressionsCollectionLiteralsMerged into 17.7p5cston333fred, RikkiGibsonCyrusNajmabadi
Interceptors (experimental feature)interceptorsMerged into 17.7p3RikkiGibsoncston, jcouvakhera99
Inline ArraysInlineArraysMerged into 17.7p3AlekseyTscston, jjonesczCosifne
nameof accessing instance membersmainMerged into 17.7p1YairHalberstadt, jjonescz333fred, AlekseyTs333fred
Using aliases for any typemainMerged into 17.6.P3CyrusNajmabadijcouv cstonCyrusNajmabadi
Primary ConstructorsPrimaryConstructorsMerged into 17.6.P2AlekseyTscston, jjonesczakhera99
Lambda optional parameterslambda-default-parametersMerged into 17.5p2adamperlin, jjonescz333fred, cstoncaptainsafia
Experimental attributemainMerged into 17.8p2jcouvcston, jjonesczjcouv

C# 11.0

FeatureBranchStateDeveloperReviewerLDM Champ
File-local typesfile-typesMerged into 17.4p1RikkiGibsonjcouv, cstonstephentoub
ref fieldsref-fieldsMerged into 17.3p3cstonRikkiGibson, AlekseyTsjaredpar
Required membersmainMerged into 17.3p2333fredjcouv, RikkiGibson333fred
DIM for Static MembersDefaultInterfaceImplementationMerged into 17.3p2AlekseyTs333fred, jcouvMadsTorgersen
Numeric IntPtrnumeric-intptrMerged into 17.3p2jcouvcston, 333fredjcouv
Unsigned Right ShiftUnsignedRightShiftMerged into 17.3p1AlekseyTs333fred, jcouvAlekseyTs
Utf8 String LiteralsmainMerged into 17.3p1AlekseyTscston, RikkiGibsonMadsTorgersen
Pattern matching on ReadOnlySpan<char>patterns-span-charMerged into 17.3p1YairHalberstadt cston, RikkiGibsonjcouv
Checked OperatorsCheckedUserDefinedOperatorsMerged into 17.3p1AlekseyTs333fred, chsienkiAlekseyTs
auto-default structsmainMerged into 17.3p1RikkiGibsoncston, jcouv
Newlines in interpolationsmainMerged in 17.1p1CyrusNajmabadijcouv, chsienkiCyrusNajmabadi
List patternsmainMerged in 17.1p2alrzjcouv, 333fred333fred
Raw string literalsmainMerged into 17.2CyrusNajmabadijcouvCyrusNajmabadi
Cache delegates for static method groupmainMerged into 17.2pawchenAlekseyTs, jcouvAlekseyTs
nameof(parameter)mainMerged into 17.3p2jcouvAlekseyTs, RikkiGibsonjcouv
Relaxing Shift OperatormainMerged into 17.3p2AlekseyTs333fred, jcouvMadsTorgersen
Generic attributesmainMerged into 17.0p4AviAvniRikkiGibson, jcouvmattwar

C# 10.0

FeatureBranchStateDeveloperReviewerLDM Champ
Record structsmainMerged into 16.11jcouvAlekseyTs, RikkiGibsonjcouv
Global Using DirectivemainMerged into 16.11AlekseyTs333fred, cstonAlekseyTs
Improved Definite AssignmentmainMerged into 17.0RikkiGibsonjcouvjaredpar
Constant Interpolated StringsmainMerged into 16.9p3kevinsun-dev333fredjaredar, agocke
Extended property patternsmainMerged into 17.0alrzjcouv, 333fred333fred
Sealed record ToStringmainMergedthomaslevesquejcouv333fred
Source Generator V2 APIsmainMerged into 17.0p2chsienkirikkigibson, jaredpar, cstonN/A
Mix declarations and variables in deconstructionmainMerged into 16.10YairHalberstadt jcouvMadsTorgersen
Async method builder overridemainMerged into 17.0p2jcouvcston, RikkiGibsonstephentoub
Enhanced #line directivemainMerged into 17.0p2cstonjcouv, RikkiGibsonMadsTorgersen
Lambda improvementsmainMerged into 17.0p2cston333fred, jcouvjaredpar
Static Abstract Members In Interfaces C# 10 PreviewmainMerged into 17.0p2AlekseyTs333fred, RikkiGibsonMadsTorgersen
Interpolated string improvementsmainMerged into 17.0p3333fredAlekseyTs, chsienkijaredpar
File-scoped namespacemainMerged into 17.0p3RikkiGibsonjcouv, chsienkiCyrusNajmabadi
Parameterless struct constructorsmainMerged into 17.0p3cstonjcouv, 333fredjcouv
Caller expression attributemainMerged into 17.0p3Youssef1313333fred,AlekseyTsjcouv

VB 17.0

FeatureBranchStateDeveloperReviewerLDM Champ
Caller expression attributemainMerged into 17.0p3Youssef1313333fred,AlekseyTsjcouv

VB 16.9

FeatureBranchStateDeveloperReviewerLDM Champ
Enable consumption of init-only propertiesmainMerged (16.9p3)AlekseyTsjcouvN/A

C# 9

FeatureBranchStateDeveloperReviewerLDM Champ
Target-typed newtarget-typed-newMerged into 16.7p1alrzjcouvjcouv
Skip locals initlocalsinitMergedt-camaia, agockejaredparagocke
Lambda discard parametersmainMergedjcouvAlekseyTs, chsienkijcouv
Native intsmainMerged into 16.7p1cston333fred, gafterjaredpar
Attributes on local functionslocal-function-attributesMergedRikkiGibsonagockeagocke
Function pointersmainMerged into 16.7p3333fredAlekseyTsjaredpar
Pattern matching improvementsmainMerged into 16.7p1gafterRikkiGibson,agockegafter
Static lambdasmainMerged in 16.7p4CyrusNajmabadijcouvjcouv
RecordsmainMerged into 16.7p3agockegafter, 333fredagocke
Target-typed conditionaltarget-typingMerged into 16.7p4gafteragocke, RikkiGibsongafter
Covariant Returnscovariant-returnsMerged into 16.8p2gafterAlekseyTs, agockegafter
Extension GetEnumeratormainMerged into 16.8p2YairHalberstadt333fred333fred
Module initializersmainMerged in 16.7p4RikkiGibson jnm2AlekseyTsgafter
Extending PartialmainMerged into 16.7p2RikkiGibsonchsienkijaredpar
Top-level statementsSimpleProgramsMerged into 16.7p3AlekseyTscston, RikkiGibsonMadsTorgersen

C# 8.0

FeatureBranchStateDeveloperReviewerLDM Champ
Default Interface MethodsmainMerged to dev16.1 preview2AlekseyTsgaftergafter
Nullable reference typemainMerged to dev16.0 preview1cston, jcouvAlekseyTs, 333fredmattwar
Recursive patternsmainMerged to dev16.0 preview2gafteragocke, cstongafter
Async streamsmainMerged to dev16.0 preview1jcouvagockestephentoub
Enhanced usingmainMerged to dev16.0 preview2chsienkiagockejaredpar
RangesmainMerged to dev16.0 preview1agockecstonjaredpar
Null-coalescing AssignmentmainMerged to dev16.0 preview1333fredcstongafter
Alternative interpolated verbatim stringsmainMerged to dev16.0 preview1jcouvcstonjcouv
stackalloc in nested contextsmainMerged to dev16.2 preview1gafter-gafter
Unmanaged generic structsmainMerged to dev16.1 preview1RikkiGibson-jaredpar
Static local functionsmainMerged in dev16.0 preview2cstonjaredparjcouv
Readonly membersmainMerged to dev16.1 preview2RikkiGibsonTBDjaredpar

VB 16.0

FeatureBranchStateDeveloperReviewerLDM Champ
Line continuation commentsmainMerged in 16.1 (preview2)paul1956AlekseyTsgafter
Relax null-coalescing operator requirementsmainMerged in 16.0333fredcstongafter

C# 7.3

FeatureBranchStateDeveloperReviewerLDM Champ
blittableNoneMergedNone-jaredpar
Support == and != for tuplesmainMergedjcouvAlekseyTsjcouv
strongnamemainMergedtyoverbyagockejaredpar
Attribute on backing fieldfeatures/compilerMergedjcouvAlekseyTsjcouv
Ref ReassignmentmainMergedagockevsadovgafter
ConstraintsmainMergedOmarTawfikvsadovgafter
Stackalloc initializersmainMergedalrzvsadovjcouv
Custom fixedmainMergedvsadovjcouvjarepdar
Indexing movable fixed buffers-Mergedvsadovjcouvjarepdar
Improved overload candidatesfeatures/compilerMergedgaftercstonmattwar
Expression variablesmainMergedAlekseyTsgafterAlekseyTs

C# 7.2 fixes

FeatureBranchStateDeveloperReviewerLDM Champ
ref and this ordering in ref extension-Mergedalrz--
Tiebreaker for by-val and in overloadsmainMergedOmarTawfik--

C# 7.2

FeatureBranchStateDeveloperReviewerLDM Champ
ref readonlymainMergedvsadov, OmarTawfikcston,gafterjaredpar
interior pointer/Span<T>/ref structmainMergedvsadovgafter, jaredparjaredpar
non-trailing named argumentsmainMergedjcouvgafterjcouv
private protectedmainMergedgafterjcouvgafter
conditional ref operatormainMergedvsadovcstonjaredpar
Digit separator after base specifiermainMergedalrz-gafter

C# 7.1

FeatureBranchStateDeveloperReviewerLDM Champ
Async MainmainMergedtyoverbyvsadovstephentoub
Default ExpressionsmainMergedjcouvcstonjcouv
Ref AssembliesmainMerged (IDE and project-system integrations ongoing)jcouvgafterN/A
Infer tuple namesmainMergedjcouvgafterjcouv
Pattern-matching with genericsmainMergedgafteragockegafter

FAQ

  • Is target version a guarantee?: No. It's explicitly not a guarantee. This is just the planned and ongoing work to the best of our knowledge at this time.
  • Where are these State values defined?: Take a look at the Developing a Language Feature document.