Compartilhar via


Parâmetros discard de lambda

Nota

Este artigo é uma especificação de recurso. A especificação serve como o documento de design para o recurso. Ele inclui alterações de especificação propostas, juntamente com as informações necessárias durante o design e o desenvolvimento do recurso. Esses artigos são publicados até que as alterações de especificação propostas sejam finalizadas e incorporadas na especificação ECMA atual.

Pode haver algumas discrepâncias entre a especificação do recurso e a implementação concluída. Essas diferenças são capturadas nas notas pertinentes da reunião de design de idioma (LDM).

Você pode saber mais sobre o processo de adoção de especificações de funcionalidades no padrão da linguagem C# no artigo sobre as especificações .

Resumo

Permitir que descartes (_) sejam usados como parâmetros de lambdas e métodos anônimos. Por exemplo:

  • lambdas: (_, _) => 0, (int _, int _) => 0
  • métodos anônimos: delegate(int _, int _) { return 0; }

Motivação

Parâmetros não utilizados não precisam ser nomeados. A finalidade dos descartes é clara, ou seja, são não utilizados/descartados.

Design detalhado

Parâmetros de método – §15.6.2 Na lista de parâmetros de um método lambda ou anônimo com mais de um parâmetro chamado _, esses parâmetros são parâmetros de descarte. Observação: se um único parâmetro for nomeado _ então ele será um parâmetro regular por motivos de compatibilidade com versões anteriores.

Os parâmetros de descarte não introduzem nomes em nenhum dos escopos. Observe que isso implica que eles não fazem com que os nomes de _ (sublinhado) fiquem ocultos.

Nomes simples (§12.8.4) Se K for zero e o simple_name aparecer dentro de um bloco e se o bloco (ou um bloco de ) espaço de declaração de variável local (Declarações - §7.3) contém uma variável local, parâmetro (com exceção de parâmetros de descarte) ou constante com o nome I, em seguida, o simple_name refere-se a essa variável local, parâmetro ou constante e é classificado como uma variável ou valor.

Escopos – §7.7 Com exceção dos parâmetros de descarte, o escopo de um parâmetro declarado em um lambda_expression (§12.19) é o anonymous_function_body dessa lambda_expression Com exceção dos parâmetros de descarte, o escopo de um parâmetro declarado em uma anonymous_method_expression (§12.19) é o bloco dessa anonymous_method_expression.