diff --git a/docfx.json b/docfx.json index fe3ab9e5498de..eee0a2598e679 100644 --- a/docfx.json +++ b/docfx.json @@ -534,7 +534,8 @@ "_csharplang/proposals/csharp-11.0/*.md": "09/30/2022", "_csharplang/proposals/csharp-12.0/*.md": "08/15/2023", "_csharplang/proposals/csharp-13.0/*.md": "10/31/2024", - "_csharplang/proposals/*.md": "06/19/2025", + "_csharplang/proposals/csharp-14.0/*.md": "08/06/2025", + "_csharplang/proposals/*.md": "08/06/2025", "_roslyn/docs/compilers/CSharp/Compiler Breaking Changes - DotNet 7.md": "11/08/2022", "_roslyn/docs/compilers/CSharp/Compiler Breaking Changes - DotNet 8.md": "11/08/2023", "_roslyn/docs/compilers/CSharp/Compiler Breaking Changes - DotNet 9.md": "11/09/2024", @@ -706,15 +707,15 @@ "_csharplang/proposals/csharp-13.0/ref-struct-interfaces.md": "Allow ref struct types to implement some interfaces", "_csharplang/proposals/csharp-13.0/partial-properties.md": "All partial properties and indexers", "_csharplang/proposals/csharp-13.0/overload-resolution-priority.md": "Overload resolution priority tiebreaker attribute", - "_csharplang/proposals/field-keyword.md": "The `field` contextual keyword", - "_csharplang/proposals/unbound-generic-types-in-nameof.md": "Unbound generic types in `nameof`", - "_csharplang/proposals/first-class-span-types.md": "First-class span types", - "_csharplang/proposals/simple-lambda-parameters-with-modifiers.md": "Simple lambda parameters with modifiers", - "_csharplang/proposals/partial-events-and-constructors.md": "Partial events and constructors", - "_csharplang/proposals/null-conditional-assignment.md": "Null conditional assignment", - "_csharplang/proposals/extensions.md": "Extension members", - "_csharplang/proposals/user-defined-compound-assignment.md": "User-defined compound assignment", - "_csharplang/proposals/ignored-directives.md": "Ignored preprocessor directives", + "_csharplang/proposals/csharp-14.0/field-keyword.md": "The `field` contextual keyword", + "_csharplang/proposals/csharp-14.0/unbound-generic-types-in-nameof.md": "Unbound generic types in `nameof`", + "_csharplang/proposals/csharp-14.0/first-class-span-types.md": "First-class span types", + "_csharplang/proposals/csharp-14.0/simple-lambda-parameters-with-modifiers.md": "Simple lambda parameters with modifiers", + "_csharplang/proposals/csharp-14.0/partial-events-and-constructors.md": "Partial events and constructors", + "_csharplang/proposals/csharp-14.0/null-conditional-assignment.md": "Null conditional assignment", + "_csharplang/proposals/csharp-14.0/extensions.md": "Extension members", + "_csharplang/proposals/csharp-14.0/user-defined-compound-assignment.md": "User-defined compound assignment", + "_csharplang/proposals/csharp-14.0/ignored-directives.md": "Ignored preprocessor directives", "_roslyn/docs/compilers/CSharp/Compiler Breaking Changes - DotNet 7.md": "C# compiler breaking changes since C# 10", "_roslyn/docs/compilers/CSharp/Compiler Breaking Changes - DotNet 8.md": "C# compiler breaking changes since C# 11", "_roslyn/docs/compilers/CSharp/Compiler Breaking Changes - DotNet 9.md": "C# compiler breaking changes since C# 12", @@ -832,15 +833,15 @@ "_csharplang/proposals/csharp-13.0/ref-struct-interfaces.md": "This proposal provides features that enable interface authors to allow `ref struct` types to implement a particular interface", "_csharplang/proposals/csharp-13.0/partial-properties.md": "This proposal provides for partial properties and indexers, allowing the definition of a property or indexer to be split across multiple parts.", "_csharplang/proposals/csharp-13.0/overload-resolution-priority.md": "This proposal introduces a new attribute, `OverloadResolutionPriorityAttribute`, that can be applied to methods to influence overload resolution.", - "_csharplang/proposals/field-keyword.md": "This proposal introduces a new keyword, `field`, that accesses the compiler generated backing field in a property accessor.", - "_csharplang/proposals/unbound-generic-types-in-nameof.md": "This proposal introduces the ability to use unbound generic types such as `List<>` in `nameof` expressions. The type argument isn't required.", - "_csharplang/proposals/first-class-span-types.md": "This proposal provides several implicit conversions to `Span` and `ReadOnlySpan` that enable library authors to have fewer overloads and developers to write code that resolves to faster Span based APIs", - "_csharplang/proposals/simple-lambda-parameters-with-modifiers.md": "This proposal allows lambda parameters to be declared with modifiers without requiring their type names. You can add modifiers like `ref` and `out` to lambda parameters without specifying their type.", - "_csharplang/proposals/partial-events-and-constructors.md": "This proposal allows partial events and constructors to be declared in partial classes. The event and constructor can be split across class declarations.", - "_csharplang/proposals/null-conditional-assignment.md": "This proposal allows the null conditional operator to be used for the destination of assignment expressions. This allows you to assign a value to a property or field only if the left side is not null.", - "_csharplang/proposals/extensions.md": "This proposal enables new kinds of extension members. These new extension members support extension properties, extension static members, including extension operators.", - "_csharplang/proposals/user-defined-compound-assignment.md": "This proposal introduces user-defined compound assignment operators. Developers can override compound assignment, increment, and decrement operators.", - "_csharplang/proposals/ignored-directives.md": "This proposal allows a source file to include ignored directives. In most cases, ignored directives are used for file based programs, for example `#!`", + "_csharplang/proposals/csharp-14.0/field-keyword.md": "This proposal introduces a new keyword, `field`, that accesses the compiler generated backing field in a property accessor.", + "_csharplang/proposals/csharp-14.0/unbound-generic-types-in-nameof.md": "This proposal introduces the ability to use unbound generic types such as `List<>` in `nameof` expressions. The type argument isn't required.", + "_csharplang/proposals/csharp-14.0/first-class-span-types.md": "This proposal provides several implicit conversions to `Span` and `ReadOnlySpan` that enable library authors to have fewer overloads and developers to write code that resolves to faster Span based APIs", + "_csharplang/proposals/csharp-14.0/simple-lambda-parameters-with-modifiers.md": "This proposal allows lambda parameters to be declared with modifiers without requiring their type names. You can add modifiers like `ref` and `out` to lambda parameters without specifying their type.", + "_csharplang/proposals/csharp-14.0/partial-events-and-constructors.md": "This proposal allows partial events and constructors to be declared in partial classes. The event and constructor can be split across class declarations.", + "_csharplang/proposals/csharp-14.0/null-conditional-assignment.md": "This proposal allows the null conditional operator to be used for the destination of assignment expressions. This allows you to assign a value to a property or field only if the left side is not null.", + "_csharplang/proposals/csharp-14.0/extensions.md": "This proposal enables new kinds of extension members. These new extension members support extension properties, extension static members, including extension operators.", + "_csharplang/proposals/csharp-14.0/user-defined-compound-assignment.md": "This proposal introduces user-defined compound assignment operators. Developers can override compound assignment, increment, and decrement operators.", + "_csharplang/proposals/csharp-14.0/ignored-directives.md": "This proposal allows a source file to include ignored directives. In most cases, ignored directives are used for file based programs, for example `#!`", "_roslyn/docs/compilers/CSharp/Compiler Breaking Changes - DotNet 7.md": "Learn about any breaking changes since the initial release of C# 10 and included in C# 11", "_roslyn/docs/compilers/CSharp/Compiler Breaking Changes - DotNet 8.md": "Learn about any breaking changes since the initial release of C# 11 and included in C# 12", "_roslyn/docs/compilers/CSharp/Compiler Breaking Changes - DotNet 9.md": "Learn about any breaking changes since the initial release of C# 12 and included in C# 13", @@ -868,6 +869,7 @@ "_csharplang/proposals/csharp-11.0/*.md": "C# feature specifications", "_csharplang/proposals/csharp-12.0/*.md": "C# feature specifications", "_csharplang/proposals/csharp-13.0/*.md": "C# feature specifications", + "_csharplang/proposals/csharp-14.0/*.md": "C# feature specifications", "_csharplang/proposals/*.md": "C# feature specifications (preview)", "docs/framework/**/*.md": ".NET Framework", "docs/framework/data/adonet/**/*.md": "ADO.NET", diff --git a/docs/csharp/includes/field-preview.md b/docs/csharp/includes/field-preview.md index b504bd1d668de..ba83ff9345bf8 100644 --- a/docs/csharp/includes/field-preview.md +++ b/docs/csharp/includes/field-preview.md @@ -7,6 +7,4 @@ ms.date: 10/30/2024 > [!IMPORTANT] > -> The `field` keyword is a preview feature in C# 13. You must be using .NET 9 and set your `` element to `preview` in your project file in order to use the `field` contextual keyword. -> -> You should be careful using the `field` keyword feature in a class that has a field named `field`. The new `field` keyword shadows a field named `field` in the scope of a property accessor. You can either change the name of the `field` variable, or use the `@` token to reference the `field` identifier as `@field`. You can learn more by reading the feature specification for [the `field` keyword](~/_csharplang/proposals/field-keyword.md). +> You should be careful using the `field` keyword feature in a class that has a field named `field`. The new `field` keyword shadows a field named `field` in the scope of a property accessor. You can either change the name of the `field` variable, or use the `@` token to reference the `field` identifier as `@field`. You can learn more by reading the feature specification for [the `field` keyword](~/_csharplang/proposals/csharp-14.0/field-keyword.md). diff --git a/docs/csharp/language-reference/keywords/extension.md b/docs/csharp/language-reference/keywords/extension.md index a743f23b6b990..eba46e1d17b85 100644 --- a/docs/csharp/language-reference/keywords/extension.md +++ b/docs/csharp/language-reference/keywords/extension.md @@ -61,7 +61,7 @@ The equivalent extension method declarations demonstrate how those type paramete ## See also -- [Extensions feature specification](~/_csharplang/proposals/extensions.md) +- [Extensions feature specification](~/_csharplang/proposals/csharp-14.0/extensions.md) ## C# language specification diff --git a/docs/csharp/language-reference/operators/addition-operator.md b/docs/csharp/language-reference/operators/addition-operator.md index 14aea62365bda..9bced4a3457d1 100644 --- a/docs/csharp/language-reference/operators/addition-operator.md +++ b/docs/csharp/language-reference/operators/addition-operator.md @@ -72,7 +72,7 @@ A user-defined type can [overload](operator-overloading.md) the `+` operator. Wh ## C# language specification -For more information, see the [Unary plus operator](~/_csharpstandard/standard/expressions.md#1292-unary-plus-operator) and [Addition operator](~/_csharpstandard/standard/expressions.md#12105-addition-operator) sections of the [C# language specification](~/_csharpstandard/standard/README.md). For more information on overloading the compound assignment operators in C# 14 and later, see the [user defined compound assignment](~/_csharplang/proposals/user-defined-compound-assignment.md) feature specification. +For more information, see the [Unary plus operator](~/_csharpstandard/standard/expressions.md#1292-unary-plus-operator) and [Addition operator](~/_csharpstandard/standard/expressions.md#12105-addition-operator) sections of the [C# language specification](~/_csharpstandard/standard/README.md). For more information on overloading the compound assignment operators in C# 14 and later, see the [user defined compound assignment](~/_csharplang/proposals/csharp-14.0/user-defined-compound-assignment.md) feature specification. ## See also diff --git a/docs/csharp/language-reference/operators/arithmetic-operators.md b/docs/csharp/language-reference/operators/arithmetic-operators.md index f90246855393b..ddb2a74d2f169 100644 --- a/docs/csharp/language-reference/operators/arithmetic-operators.md +++ b/docs/csharp/language-reference/operators/arithmetic-operators.md @@ -290,7 +290,7 @@ For more information, see the following sections of the [C# language specificati - [Compound assignment](~/_csharpstandard/standard/expressions.md#12214-compound-assignment) - [The checked and unchecked operators](~/_csharpstandard/standard/expressions.md#12820-the-checked-and-unchecked-operators) - [Numeric promotions](~/_csharpstandard/standard/expressions.md#1247-numeric-promotions) -- [User defined compound assignment](~/_csharplang/proposals/user-defined-compound-assignment.md) +- [User defined compound assignment](~/_csharplang/proposals/csharp-14.0/user-defined-compound-assignment.md) ## See also diff --git a/docs/csharp/language-reference/operators/assignment-operator.md b/docs/csharp/language-reference/operators/assignment-operator.md index db8f86ff5bd12..d5c47a98de594 100644 --- a/docs/csharp/language-reference/operators/assignment-operator.md +++ b/docs/csharp/language-reference/operators/assignment-operator.md @@ -81,7 +81,7 @@ If a user-defined type overloads a binary operator `op`, the `op=` operator, if ## C# language specification -For more information, see the [Assignment operators](~/_csharpstandard/standard/expressions.md#1221-assignment-operators) section of the [C# language specification](~/_csharpstandard/standard/README.md) and the [User defined compound assignment](~/_csharplang/proposals/user-defined-compound-assignment.md) feature specification. +For more information, see the [Assignment operators](~/_csharpstandard/standard/expressions.md#1221-assignment-operators) section of the [C# language specification](~/_csharpstandard/standard/README.md) and the [User defined compound assignment](~/_csharplang/proposals/csharp-14.0/user-defined-compound-assignment.md) feature specification. ## See also diff --git a/docs/csharp/language-reference/operators/bitwise-and-shift-operators.md b/docs/csharp/language-reference/operators/bitwise-and-shift-operators.md index 3a8151e71719b..c4638e8f09701 100644 --- a/docs/csharp/language-reference/operators/bitwise-and-shift-operators.md +++ b/docs/csharp/language-reference/operators/bitwise-and-shift-operators.md @@ -201,7 +201,7 @@ For more information, see the following sections of the [C# language specificati - [Numeric promotions](~/_csharpstandard/standard/expressions.md#1247-numeric-promotions) - [C# 11 - Relaxed shift requirements](~/_csharplang/proposals/csharp-11.0/relaxing_shift_operator_requirements.md) - [C# 11 - Logical right-shift operator](~/_csharplang/proposals/csharp-11.0/unsigned-right-shift-operator.md) -- [User defined compound assignment](~/_csharplang/proposals/user-defined-compound-assignment.md) +- [User defined compound assignment](~/_csharplang/proposals/csharp-14.0/user-defined-compound-assignment.md) ## See also diff --git a/docs/csharp/language-reference/operators/boolean-logical-operators.md b/docs/csharp/language-reference/operators/boolean-logical-operators.md index 7360d387a25af..751c63970a1c8 100644 --- a/docs/csharp/language-reference/operators/boolean-logical-operators.md +++ b/docs/csharp/language-reference/operators/boolean-logical-operators.md @@ -194,7 +194,7 @@ For more information, see the following sections of the [C# language specificati - [Logical operators](~/_csharpstandard/standard/expressions.md#1213-logical-operators) - [Conditional logical operators](~/_csharpstandard/standard/expressions.md#1214-conditional-logical-operators) - [Compound assignment](~/_csharpstandard/standard/expressions.md#12214-compound-assignment) -- [User defined compound assignment](~/_csharplang/proposals/user-defined-compound-assignment.md) +- [User defined compound assignment](~/_csharplang/proposals/csharp-14.0/user-defined-compound-assignment.md) ## See also diff --git a/docs/csharp/language-reference/operators/subtraction-operator.md b/docs/csharp/language-reference/operators/subtraction-operator.md index 05d1743fe688d..bebeeaaa0ce0b 100644 --- a/docs/csharp/language-reference/operators/subtraction-operator.md +++ b/docs/csharp/language-reference/operators/subtraction-operator.md @@ -69,7 +69,7 @@ A user-defined type can [overload](operator-overloading.md) the `-` operator. Wh ## C# language specification -For more information, see the [Unary minus operator](~/_csharpstandard/standard/expressions.md#1293-unary-minus-operator) and [Subtraction operator](~/_csharpstandard/standard/expressions.md#12106-subtraction-operator) sections of the [C# language specification](~/_csharpstandard/standard/README.md). For more information on overloading the compound assignment operators in C# 14 and later, see the [user defined compound assignment](~/_csharplang/proposals/user-defined-compound-assignment.md) feature specification. +For more information, see the [Unary minus operator](~/_csharpstandard/standard/expressions.md#1293-unary-minus-operator) and [Subtraction operator](~/_csharpstandard/standard/expressions.md#12106-subtraction-operator) sections of the [C# language specification](~/_csharpstandard/standard/README.md). For more information on overloading the compound assignment operators in C# 14 and later, see the [user defined compound assignment](~/_csharplang/proposals/csharp-14.0/user-defined-compound-assignment.md) feature specification. ## See also diff --git a/docs/csharp/programming-guide/classes-and-structs/partial-classes-and-methods.md b/docs/csharp/programming-guide/classes-and-structs/partial-classes-and-methods.md index 4598d32d1c20d..6645c4a758237 100644 --- a/docs/csharp/programming-guide/classes-and-structs/partial-classes-and-methods.md +++ b/docs/csharp/programming-guide/classes-and-structs/partial-classes-and-methods.md @@ -149,7 +149,7 @@ partial void OnNameChanged() ## C# Language Specification -For more information, see [Partial types](~/_csharpstandard/standard/classes.md#1527-partial-type-declarations) and [Partial methods](~/_csharpstandard/standard/classes.md#1569-partial-methods) in the [C# Language Specification](~/_csharpstandard/standard/README.md). The language specification is the definitive source for C# syntax and usage. The new features for partial members are defined in the feature specifications for [extending partial methods](~/_csharplang/proposals/csharp-9.0/extending-partial-methods.md), [partial properties and indexers](~/_csharplang/proposals/csharp-13.0/partial-properties.md), and [partial events and constructors](~/_csharplang/proposals/partial-events-and-constructors.md). +For more information, see [Partial types](~/_csharpstandard/standard/classes.md#1527-partial-type-declarations) and [Partial methods](~/_csharpstandard/standard/classes.md#1569-partial-methods) in the [C# Language Specification](~/_csharpstandard/standard/README.md). The language specification is the definitive source for C# syntax and usage. The new features for partial members are defined in the feature specifications for [extending partial methods](~/_csharplang/proposals/csharp-9.0/extending-partial-methods.md), [partial properties and indexers](~/_csharplang/proposals/csharp-13.0/partial-properties.md), and [partial events and constructors](~/_csharplang/proposals/csharp-14.0/partial-events-and-constructors.md). ## See also diff --git a/docs/csharp/specification/toc.yml b/docs/csharp/specification/toc.yml index c843abdd0f15c..12e21d99dc17b 100644 --- a/docs/csharp/specification/toc.yml +++ b/docs/csharp/specification/toc.yml @@ -80,7 +80,7 @@ items: - name: "Escape sequence '\\e'" href: ../../../_csharplang/proposals/csharp-13.0/esc-escape-sequence.md - name: "Ignored directives" - href: ../../../_csharplang/proposals/ignored-directives.md + href: ../../../_csharplang/proposals/csharp-14.0/ignored-directives.md - name: Basic concepts items: - name: Top-level statements @@ -120,7 +120,7 @@ items: - name: Conversions items: - name: First class span types - href: ../../../_csharplang/proposals/first-class-span-types.md + href: ../../../_csharplang/proposals/csharp-14.0/first-class-span-types.md - name: Patterns items: - name: Recursive pattern matching @@ -160,7 +160,7 @@ items: - name: Optional Lambda expression parameters href: ../../../_csharplang/proposals/csharp-12.0/lambda-method-group-defaults.md - name: Simple lambda parameters with modifiers - href: ../../../_csharplang/proposals/simple-lambda-parameters-with-modifiers.md + href: ../../../_csharplang/proposals/csharp-14.0/simple-lambda-parameters-with-modifiers.md - name: Checked user-defined operators href: ../../../_csharplang/proposals/csharp-11.0/checked-user-defined-operators.md - name: Unsigned right-shift operator @@ -172,13 +172,13 @@ items: - name: Extended nameof scope href: ../../../_csharplang/proposals/csharp-11.0/extended-nameof-scope.md - name: Unbound generic types in nameof - href: ../../../_csharplang/proposals/unbound-generic-types-in-nameof.md + href: ../../../_csharplang/proposals/csharp-14.0/unbound-generic-types-in-nameof.md - name: Overload resolution priority href: ../../../_csharplang/proposals/csharp-13.0/overload-resolution-priority.md - name: Null conditional assignment - href: ../../../_csharplang/proposals/null-conditional-assignment.md + href: ../../../_csharplang/proposals/csharp-14.0/null-conditional-assignment.md - name: User defined compound assignment operators - href: ../../../_csharplang/proposals/user-defined-compound-assignment.md + href: ../../../_csharplang/proposals/csharp-14.0/user-defined-compound-assignment.md - name: Statements items: - name: Global using directive @@ -204,9 +204,9 @@ items: - name: Partial properties href: ../../../_csharplang/proposals/csharp-13.0/partial-properties.md - name: Partial events and constructors - href: ../../../_csharplang/proposals/partial-events-and-constructors.md + href: ../../../_csharplang/proposals/csharp-14.0/partial-events-and-constructors.md - name: Field backed properties - href: ../../../_csharplang/proposals/field-keyword.md + href: ../../../_csharplang/proposals/csharp-14.0/field-keyword.md - name: Covariant return types href: ../../../_csharplang/proposals/csharp-9.0/covariant-returns.md - name: Primary constructors @@ -220,7 +220,7 @@ items: - name: Params collections href: ../../../_csharplang/proposals/csharp-13.0/params-collections.md - name: Extension members - href: ../../../_csharplang/proposals/extensions.md + href: ../../../_csharplang/proposals/csharp-14.0/extensions.md - name: Structs items: - name: Parameterless struct constructors diff --git a/docs/csharp/whats-new/csharp-14.md b/docs/csharp/whats-new/csharp-14.md index 18a0a50fc153a..09e4ab942ceb9 100644 --- a/docs/csharp/whats-new/csharp-14.md +++ b/docs/csharp/whats-new/csharp-14.md @@ -61,7 +61,7 @@ public static class Enumerable The members in the first extension block are called as though they're instance members of `IEnumerable`, for example `sequence.IsEmpty`. The members in the second extension block are called as though they're static members of `IEnumerable`, for example `IEnumerable.Identity`. -You can learn more details by reading the article on [extension members](../programming-guide/classes-and-structs/extension-methods.md) in the programming guide, the language reference article on the [`extension` keyword](../language-reference/keywords/extension.md), and the [feature specification](~/_csharplang/proposals/extensions.md) for the new extension members feature. +You can learn more details by reading the article on [extension members](../programming-guide/classes-and-structs/extension-methods.md) in the programming guide, the language reference article on the [`extension` keyword](../language-reference/keywords/extension.md), and the [feature specification](~/_csharplang/proposals/csharp-14.0/extensions.md) for the new extension members feature. ## The `field` keyword @@ -102,7 +102,7 @@ C# 14 introduces first-class support for ` and `ReadOnlySpan` are used in many key ways in C# and the runtime. Their introduction improves performance without risking safety. C# 14 recognizes the relationship and supports some conversions between `ReadOnlySpan`, `Span`, and `T[]`. The span types can be extension method receivers, compose with other conversions, and help with generic type inference scenarios. -You can find the list of implicit span conversions in the article on [built-in types](../language-reference/builtin-types/built-in-types.md) in the language reference section. You can learn more details by reading the feature specification for [First class span types](~/_csharplang/proposals/first-class-span-types.md). +You can find the list of implicit span conversions in the article on [built-in types](../language-reference/builtin-types/built-in-types.md) in the language reference section. You can learn more details by reading the feature specification for [First class span types](~/_csharplang/proposals/csharp-14.0/first-class-span-types.md). ## Unbound generic types and `nameof` @@ -140,7 +140,7 @@ The implementing declaration of a partial event must include `add` and `remove` ## User defined compound assignment -You can learn more in the feature specification for [user-defined compound assignment](~/_csharplang/proposals/user-defined-compound-assignment.md). +You can learn more in the feature specification for [user-defined compound assignment](~/_csharplang/proposals/csharp-14.0/user-defined-compound-assignment.md). ## Null-conditional assignment @@ -165,7 +165,7 @@ The right side of the `=` operator is evaluated only when the left side isn't nu In addition to assignment, you can use null-conditional member access operators with compound assignment operators (`+=`, `-=`, and others). However, increment and decrement, `++` and `--`, aren't allowed. -You can learn more in the language reference article on the [conditional member access](../language-reference/operators/member-access-operators.md#null-conditional-operators--and-) and the feature specification for [null-conditional assignment](~/_csharplang/proposals/null-conditional-assignment.md). +You can learn more in the language reference article on the [conditional member access](../language-reference/operators/member-access-operators.md#null-conditional-operators--and-) and the feature specification for [null-conditional assignment](~/_csharplang/proposals/csharp-14.0/null-conditional-assignment.md). ## See also