Refatorações de loop e LINQ

Visual Studio fornece várias refatorações para converter entre loops e expressões LINQ. Você pode acessar essas refatorações por meio do menu Ações Rápidas e Refatorações (Ctrl+.).

Converter um loop for em uma instrução foreach

Applies to: C#, Visual Basic

Essa refatoração converte um loop for em uma instrução foreach . É útil quando você não precisa da variável de loop como um índice e deseja simplificar seu código.

Observação

A refatoração Converter em Ação Rápida foreach só está disponível para loops que contêm todas as três partes: um inicializador, uma condição e um iterador.

  1. Coloque seu cursor na for palavra-chave.

  2. Pressione Ctrl+ou clique no ícone da chave de fenda na margem do arquivo de código.

    Captura de tela do menu Converter em foreach.

  3. Selecione Converter em 'foreach'. Ou selecione Visualizar alterações para abrir a caixa de diálogo Alterações de Visualização e, em seguida, selecione Aplicar.

Converter uma instrução foreach em um loop for

Applies to: C#, Visual Basic

Essa refatoração converte uma instrução foreach em um loop for . É útil quando você precisa usar a variável de loop para mais do que apenas acessar itens ou ao iterar por meio de uma matriz multidimensional.

  1. Coloque seu cursor na palavra-chave ou For Each na foreach palavra-chave.

  2. Pressione Ctrl+ou clique no ícone da chave de fenda na margem do arquivo de código.

    Captura de tela do menu Converter para.

  3. Selecione Converter em 'for'. Ou selecione Visualizar alterações para abrir a caixa de diálogo Alterações de Visualização e, em seguida, selecione Aplicar.

  4. Como a refatoração introduz uma nova variável de contagem de iteração, a caixa Renomear aparece no canto superior direito do editor. Se você quiser escolher um nome diferente para a variável, digite-o e pressione Enter ou selecione Aplicar na caixa Renomear . Se você não quiser escolher um novo nome, pressione Esc ou selecione Aplicar para ignorar a caixa Renomear .

Observação

Para C#, o código gerado por essas refatorações usa um tipo explícito ou var para o tipo dos itens na coleção. O tipo no código gerado, explícito ou implícito, depende das configurações de estilo de código que estão no escopo. Essas configurações específicas de estilo de código são configuradas no nível do computador em preferênciasC#>Code Style>General'var>' doEditor> deOpções> de Ferramentas> ou no nível da solução em um arquivo EditorConfig. Se você alterar uma configuração de estilo de código em Opções, reabra o arquivo de código para que as alterações entrem em vigor.

Converter um loop foreach em LINQ

Aplica-se a: C#

Essa refatoração converte um loop foreach que usa um IEnumerable em uma consulta LINQ ou um formulário de chamada LINQ (também conhecido como um método LINQ).

Observação

A sintaxe LINQ normalmente é menos eficiente do que um loop foreach. É bom estar ciente de qualquer compensação de desempenho que possa ocorrer quando você usa LINQ para melhorar a legibilidade do seu código.

  1. Coloque o cursor na foreach palavra-chave.

    Captura de tela de Foreach usando o exemplo IEnumerable.

  2. Pressione (Ctrl+.) para acionar o menu Ações Rápidas e Refatorações.

    Captura de tela do exemplo de menu Converter em LINQ.

  3. Selecione Converter em LINQ ou Converter em Linq (formulário de chamada).

    Captura de tela do exemplo de resultado da consulta LINQ.

    Captura de tela do exemplo de resultado do formulário de chamada LINQ.

Código de exemplo

using System.Collections.Generic;

public class Class1
{
    public void MyMethod()
    {
        var greetings = new List<string>()
            { "hi", "yo", "hello", "howdy" };

        IEnumerable<string> enumerable()
        {
            foreach (var greet in greetings)
            {
                if (greet.Length < 3)
                {
                    yield return greet;
                }
            }

            yield break;
        }
    }
}

Converter LINQ em instrução foreach

Applies to: C#, Visual Basic

Essa refatoração converte a sintaxe de consulta LINQ em uma instrução foreach .

  1. Selecione toda a consulta LINQ começando com from.

    Observação

    Essa refatoração só pode ser usada para converter consultas LINQ expressas com sintaxe de consulta e não com sintaxe de método.

  2. Pressione Ctrl+ou clique no ícone da chave de fenda da chave de fenda na margem do arquivo de código.

    Captura de tela do menu Converter LINQ em ações rápidas foreach.

  3. Selecione Converter em 'foreach'. Ou selecione Visualizar alterações para abrir a caixa de diálogo Alterações de Visualização e, em seguida, selecione Aplicar.

Observação

Para C#, o código gerado por essas refatorações usa um tipo explícito ou var para a variável de iteração do foreach loop. O tipo no código gerado, explícito ou implícito, depende das configurações de estilo de código que estão no escopo. Essas configurações específicas de estilo de código são configuradas no nível do computador em preferênciasC#>Code Style>General'var>' doEditor> deOpções> de Ferramentas> ou no nível da solução em um arquivo EditorConfig. Se você alterar uma configuração de estilo de código em Opções, reabra o arquivo de código para que as alterações entrem em vigor.

Simplificar a expressão LINQ

Aplica-se a: C#

Essa refatoração simplifica as instâncias de SomeEnumerableType.Where(<LambdaExpression>).Single() para SomeEnumerable.Single(<LambdaExpression>)Enumerable.Single() , bem como os seguintes métodos enumeráveis: SingleOrDefault(), , Last(), LastOrDefault(), Any(), Count(), First()e FirstOrDefault().

Remover a chamada desnecessária para a Enumerável para o método melhora a .Where() legibilidade e, em alguns casos, o desempenho.

  1. Coloque o cursor na instância SomeEnumerableType.Where(<LambdaExpression>).Single() em Visual Studio.

  2. Pressione (Ctrl+.) para acionar o menu Ações Rápidas e Refatorações.

  3. Selecione Simplificar expressão LINQ.

    Captura de tela de Simplificar expressão LINQ.