Loop- och LINQ-refaktoriseringar

Visual Studio innehåller flera refaktoriseringar för konvertering mellan loopar och LINQ-uttryck. Du kan komma åt dessa refaktoriseringar via snabbåtgärder och refaktoriseringar (Ctrl+.).

Konvertera en for-loop till en foreach-instruktion

Applies to: C#, Visual Basic

Den här refaktoreringen konverterar en for-loop till en foreach-instruktion . Det är användbart när du inte behöver loopvariabeln som ett index och vill förenkla koden.

Anmärkning

Refaktorindelningen Konvertera till förgrening av snabbåtgärd är endast tillgänglig för loopar som innehåller alla tre delarna: en initierare, ett villkor och en iterator.

  1. Placera din caret i nyckelordet for .

  2. Tryck på Ctrl+. Eller klicka på ikonen för skruvmejselikonen i kodfilens marginal.

    Skärmbild av menyn Konvertera till foreach.

  3. Välj Konvertera till "foreach". Eller välj Förhandsgranska ändringar för att öppna dialogrutan Förhandsgranskningsändringar och välj sedan Använd.

Konvertera en foreach-instruktion till en for-loop

Applies to: C#, Visual Basic

Den här refaktoreringen konverterar en foreach-instruktion till en for-loop . Det är användbart när du behöver använda loopvariabeln för mer än att bara komma åt objekt, eller när du itererar genom en flerdimensionell matris.

  1. Placera din caret i nyckelordet foreach eller For Each .

  2. Tryck på Ctrl+. Eller klicka på ikonen för skruvmejselikonen i kodfilens marginal.

    Skärmbild av Konvertera till för-menyn.

  3. Välj Konvertera till för. Eller välj Förhandsgranska ändringar för att öppna dialogrutan Förhandsgranskningsändringar och välj sedan Använd.

  4. Eftersom refaktoreringen introducerar en ny iterationsvariabel visas rutan Byt namn i det övre högra hörnet i redigeraren. Om du vill välja ett annat namn för variabeln skriver du in den och trycker sedan på Retur eller väljer Använd i rutan Byt namn . Om du inte vill välja ett nytt namn trycker du på Esc eller väljer Använd för att stänga rutan Byt namn .

Anmärkning

För C#använder koden som genereras av dessa refaktoriseringar antingen en explicit typ eller var för typen av objekt i samlingen. Typen i den genererade koden, explicit eller implicit, beror på de kodformatinställningar som finns i omfånget. De här inställningarna för kodformat konfigureras på datornivå under Verktyg>Alternativ>Textredigerare>C#>Code Style>General'var>'-inställningar, eller på lösningsnivå i en EditorConfig-fil. Om du ändrar en kodstilinställning i Alternativ öppnar du kodfilen igen för att ändringarna ska börja gälla.

Konvertera en foreach-loop till LINQ

Gäller för: C#

Den här refaktoreringen konverterar en foreach-loop som använder en IEnumerable till en LINQ-fråga eller ett LINQ-anropsformulär (även kallat linq-metod).

Anmärkning

LINQ-syntaxen är vanligtvis mindre effektiv än en foreach-loop. Det är bra att vara medveten om eventuella prestandaavvägningar som kan uppstå när du använder LINQ för att förbättra kodens läsbarhet.

  1. Placera markören i nyckelordet foreach .

    Skärmbild av Foreach med IEnumerable-exempel.

  2. Tryck på Ctrl+för att utlösa menyn Snabbåtgärder och Omstrukturera.

    Skärmbild av menyexemplet Konvertera till LINQ.

  3. Välj Konvertera till LINQ eller Konvertera till Linq (anropsformulär).

    Skärmbild av LINQ-frågeresultatexempel.

    Skärmbild av linq-anropsformulärresultatexempel.

Exempelkod

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

Konvertera LINQ till foreach-instruktion

Applies to: C#, Visual Basic

Den här refaktoreringen konverterar LINQ-frågesyntax till en foreach-instruktion .

  1. Välj hela LINQ-frågan från och med from.

    Anmärkning

    Den här refaktorn kan bara användas för att konvertera LINQ-frågor uttryckta med frågesyntax och inte metodsyntax.

  2. Tryck på Ctrl+. Eller klicka på ikonen för skruvmejselskruven i kodfilens marginal.

    Skärmbild av menyn Konvertera LINQ till foreach-snabbåtgärder.

  3. Välj Konvertera till "foreach". Eller välj Förhandsgranska ändringar för att öppna dialogrutan Förhandsgranskningsändringar och välj sedan Använd.

Anmärkning

För C#använder koden som genereras av dessa refaktoriseringar antingen en explicit typ eller var för iterationsvariabeln för loopen foreach . Typen i den genererade koden, explicit eller implicit, beror på de kodformatinställningar som finns i omfånget. De här inställningarna för kodformat konfigureras på datornivå under Verktyg>Alternativ>Textredigerare>C#>Code Style>General'var>'-inställningar, eller på lösningsnivå i en EditorConfig-fil. Om du ändrar en kodstilinställning i Alternativ öppnar du kodfilen igen för att ändringarna ska börja gälla.

Förenkla LINQ-uttryck

Gäller för: C#

Den här refaktoreringen förenklar instanser av SomeEnumerableType.Where(<LambdaExpression>).Single() till SomeEnumerable.Single(<LambdaExpression>) för Enumerable.Single() samt följande uppräkningsbara metoder: SingleOrDefault(), Last(), LastOrDefault(), Any(), Count(), First()och FirstOrDefault().

Om du tar bort det onödiga anropet till enumerable för metoden förbättras läsbarheten .Where() och i vissa fall prestanda.

  1. Placera markören i instansen SomeEnumerableType.Where(<LambdaExpression>).Single() i Visual Studio.

  2. Tryck på Ctrl+för att utlösa menyn Snabbåtgärder och Omstrukturera.

  3. Välj Förenkla LINQ-uttryck.

    Skärmbild av Förenkla LINQ-uttrycket.