Refactoring di cicli e LINQ

Visual Studio fornisce diversi refactoring per la conversione tra cicli ed espressioni LINQ. È possibile accedere a questi refactoring tramite il menu Azioni rapide e refactoring (CTRL+).).

Convertire un ciclo for in un'istruzione foreach

Applica a: C#, Visual Basic

Questo refactoring converte un ciclo for in un'istruzione foreach . È utile quando non è necessaria la variabile di ciclo come indice e si vuole semplificare il codice.

Annotazioni

Il refactoring dell'azione rapida Convert to foreach è disponibile solo per i cicli che contengono tutte e tre le parti: un inizializzatore, una condizione e un iteratore.

  1. Posizionare il cursore nella for parola chiave .

  2. Premere CTRL+oppure fare clic sull'icona del cacciavite a forma di cacciavite nel margine del file di codice.

    Screenshot del menu Converti in foreach.

  3. Selezionare Converti in 'foreach'. In alternativa, selezionare Anteprima modifiche per aprire la finestra di dialogo Anteprima modifiche e quindi selezionare Applica.

Convertire un'istruzione foreach in un ciclo for

Applica a: C#, Visual Basic

Questo refactoring converte un'istruzione foreach in un ciclo for . È utile quando è necessario usare la variabile di ciclo per più di accesso agli elementi o quando si esegue l'iterazione di una matrice multidimensionale.

  1. Posizionare il cursore nella foreach parola chiave o For Each .

  2. Premere CTRL+oppure fare clic sull'icona del cacciavite a forma di cacciavite nel margine del file di codice.

    Screenshot di Converti in per il menu.

  3. Selezionare Converti in 'for'. In alternativa, selezionare Anteprima modifiche per aprire la finestra di dialogo Anteprima modifiche e quindi selezionare Applica.

  4. Poiché il refactoring introduce una nuova variabile di conteggio iterazioni, la casella Rinomina viene visualizzata nell'angolo superiore destro dell'editor. Per scegliere un nome diverso per la variabile, digitarlo e quindi premere INVIO o selezionare Applica nella casella Rinomina . Se non si vuole scegliere un nuovo nome, premere ESC o selezionare Applica per chiudere la casella Rinomina .

Annotazioni

Per C#, il codice generato da questi refactoring usa un tipo esplicito o var per il tipo di elementi nella raccolta. Il tipo nel codice generato, esplicito o implicito, dipende dalle impostazioni di tipo codice incluse nell'ambito. Queste impostazioni specifiche dello stile di codice vengono configurate a livello di computer in Strumenti>Opzioni> Editor >di testoC#>Preferenze generali>> stile codice'var' o a livello di soluzione in un file EditorConfig. Se si modifica un'impostazione di tipo codice in Opzioni, riaprire il file di codice per rendere effettive le modifiche.

Convertire un ciclo foreach in LINQ

Si applica a: C#

Questo refactoring converte un ciclo foreach che usa un IEnumerable in una query LINQ o in un modulo di chiamata LINQ (noto anche come metodo LINQ).

Annotazioni

La sintassi LINQ è in genere meno efficiente di un ciclo foreach. È consigliabile tenere presente qualsiasi compromesso delle prestazioni che può verificarsi quando si usa LINQ per migliorare la leggibilità del codice.

  1. Posizionare il cursore nella foreach parola chiave .

    Screenshot dell'esempio Foreach con IEnumerable.

  2. Premere CTRL+ per attivare il menu Azioni rapide e refactoring.

    Screenshot dell'esempio di menu Converti in LINQ.

  3. Selezionare Converti in LINQ o Converti in Linq (modulo di chiamata).

    Screenshot dell'esempio di risultati della query LINQ.

    Screenshot dell'esempio di risultati del modulo di chiamata LINQ.

Esempio di codice

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;
        }
    }
}

Convertire l'istruzione LINQ in foreach

Applica a: C#, Visual Basic

Questo refactoring converte la sintassi di query LINQ in un'istruzione foreach .

  1. Selezionare l'intera query LINQ a partire da from.

    Annotazioni

    Questo refactoring può essere usato solo per convertire le query LINQ espresse con la sintassi delle query e non con la sintassi del metodo.

  2. Premere CTRL+oppure fare clic sull'icona del cacciavite nel margine del file di codice.

    Screenshot del menu Convert LINQ to foreach quick actions (Converti LINQ to foreach quick actions).

  3. Selezionare Converti in 'foreach'. In alternativa, selezionare Anteprima modifiche per aprire la finestra di dialogo Anteprima modifiche e quindi selezionare Applica.

Annotazioni

Per C#, il codice generato da questi refactoring usa un tipo esplicito o var per la variabile di iterazione del foreach ciclo. Il tipo nel codice generato, esplicito o implicito, dipende dalle impostazioni di tipo codice incluse nell'ambito. Queste impostazioni specifiche dello stile di codice vengono configurate a livello di computer in Strumenti>Opzioni> Editor >di testoC#>Preferenze generali>> stile codice'var' o a livello di soluzione in un file EditorConfig. Se si modifica un'impostazione di tipo codice in Opzioni, riaprire il file di codice per rendere effettive le modifiche.

Semplificare l'espressione LINQ

Si applica a: C#

Questo refactoring semplifica le istanze di per SomeEnumerable.Single(<LambdaExpression>) e i metodi Enumerable seguenti: SingleOrDefault(), , First()Count()LastOrDefault()Last()Any()e .FirstOrDefault()Enumerable.Single()SomeEnumerableType.Where(<LambdaExpression>).Single()

La rimozione della chiamata non necessaria all'Enumerable per il .Where() metodo migliora la leggibilità e in alcuni casi le prestazioni.

  1. Posizionare il cursore all'interno dell'istanza di SomeEnumerableType.Where(<LambdaExpression>).Single() in Visual Studio.

  2. Premere CTRL+ per attivare il menu Azioni rapide e refactoring.

  3. Selezionare Semplificare l'espressione LINQ.

    Screenshot di Semplificare l'espressione LINQ.