dotnet / dotnet/csharplang

Champion "Expression variables in initializers" (15.7)

Open
#32 5 comments 9 reactions 1 assignee Assigned to @AlekseyTs View on GitHub
Implemented Needs ECMA Spec Proposal champion
Dominant language
C#
Stars
12.7k
Forks
1.1k
Avg merge
11h 1m
Merged PRs (30d)
3

Description

- [X] Proposal added: [proposals/csharp-7.3/expression-variables-in-initializers.md](https://github.com/dotnet/csharplang/blob/master/proposals/csharp-7.3/expression-variables-in-initializers.md)
- [x] Discussed in LDM
- [x] Decision in LDM
- [ ] Finalized (done, rejected, inactive)
- [ ] Spec'ed

See also https://github.com/dotnet/roslyn/issues/16270

There are three contexts where out variable declarations and pattern matching variable declarations are not permitted today, in part because we did not decide what the scope should be. I propose we decide for each of these three contexts, and extend the language to permit declaration expressions in these contexts.

1. Constructor-initializers. The primary question is whether the scope of variables declared in a ctor-initializer extends to the constructor body or not. I propose that it should extend to the body.

2. Field initializers. The primary question is whether the scope of variables declared in the one *equals-value-clause* is in scope in subsequent *equals-value-clause*s of the same field declaration (when it declares more than one field). It is also possible to extend the scope to subsequent separate field declaration's initializers too, but I don't think that is likely to be approved by the LDM.

3. Query clauses. The primary question is what is the scope of variables declared in a query clause that is specified to be translated into the body of a lambda. One possible resolution is that its scope is just that expression of the clause.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.