Local function declarations are now permitted to have attributes. Parameters and type parameters on local functions are also allowed to have attributes.
Attributes with a specified meaning when applied to a method, its parameters, or its type parameters will have the same meaning when applied to a local function, its parameters, or its type parameters, respectively.
A local function can be made conditional in the same sense as a conditional method by decorating it with a [ConditionalAttribute]
. A conditional local function must also be static
. All restrictions on conditional methods also apply to conditional local functions, including that the return type must be void
.
The extern
modifier is now permitted on local functions. This makes the local function external in the same sense as an external method.
Similarly to an external method, the local-function-body of an external local function must be a semicolon. A semicolon local-function-body is only permitted on an external local function.
An external local function must also be static
.
The local functions grammar is modified as follows:
local-function-header
: attributes? local-function-modifiers? return-type identifier type-parameter-list?
( formal-parameter-list? ) type-parameter-constraints-clauses
;
local-function-modifiers
: (async | unsafe | static | extern)*
;
local-function-body
: block
| arrow-expression-body
| ';'
;