언어

루프 및 LINQ 리팩터링

Visual Studio 루프와 LINQ 식 간에 변환하기 위한 몇 가지 리팩터링을 제공합니다. 빠른 작업 및 리팩터링 메뉴(Ctrl+.)를 통해 이러한 리팩터링에 액세스할 수 있습니다.

for 루프를 foreach 문으로 변환

: C#, Visual Basic

이 리팩터링에서는 for 루프를 foreach 문으로 변환합니다. 루프 변수를 인덱스로 필요로 하지 않고 코드를 간소화하려는 경우에 유용합니다.

메모

foreach 빠른 작업 리팩터링으로 변환은 이니셜라이저, 조건 및 반복기의 세 부분을 모두 포함하는 루프에만 사용할 수 있습니다.

  1. 키워드에 for 캐리트를 배치합니다.

  2. Ctrl 키를+누르거나 코드 파일 여백에서 드라이버 스크류 드라이버 아이콘 아이콘을 클릭합니다.

    foreach로 변환 메뉴의 스크린샷.

  3. 'foreach'로 변환을 선택합니다. 또는 변경 내용 미리 보기를 선택하여 변경 내용 미리 보기 대화 상자를 연 다음 적용을 선택합니다.

foreach 문을 for 루프로 변환

: C#, Visual Basic

이 리팩터링에서는 foreach 문을 for 루프로 변환합니다. 항목에 액세스하는 것 이상의 용도로 루프 변수를 사용해야 하거나 다차원 배열을 반복할 때 유용합니다.

  1. 또는 For Each 키워드에 foreach 캐리트를 배치합니다.

  2. Ctrl 키를+누르거나 코드 파일 여백에서 드라이버 스크류 드라이버 아이콘 아이콘을 클릭합니다.

    변환 대상 메뉴의 스크린샷.

  3. 'for'로 변환을 선택합니다. 또는 변경 내용 미리 보기를 선택하여 변경 내용 미리 보기 대화 상자를 연 다음 적용을 선택합니다.

  4. 리팩터링에 새 반복 개수 변수가 도입되므로 편집기의 오른쪽 위 모서리에 이름 바꾸기 상자가 나타납니다. 변수의 다른 이름을 선택하려면 변수를 입력한 다음 Enter 키를 누르거나 이름 바꾸기 상자에서 적용을 선택합니다. 새 이름을 선택하지 않으려면 Esc 키를 누르거나 적용 을 선택하여 이름 바꾸기 상자를 해제합니다.

메모

C#의 경우 이러한 리팩터링에서 생성된 코드는 컬렉션에 있는 항목의 형식에 대해 명시적 형식 또는 var 을 사용합니다. 생성된 코드의 형식(명시적 또는 암시적)은 범위에 있는 코드 스타일 설정에 따라 달라집니다. 이러한 특정 코드 스타일 설정은 도구>옵션>텍스트 편집기>C#>Code Style>General'var>기본 설정의 컴퓨터 수준 또는 EditorConfig 파일의 솔루션 수준에서 구성됩니다. 옵션에서 코드 스타일 설정을 변경하는 경우 변경 내용을 적용하려면 코드 파일을 다시 엽니다.

foreach 루프를 LINQ로 변환

적용 대상: C#

이 리팩터링에서는 IEnumerable을 사용하는 foreach 루프를 LINQ 쿼리 또는 LINQ 호출 양식(LINQ 메서드라고도 함)으로 변환합니다.

메모

LINQ 구문은 일반적으로 foreach 루프보다 효율성이 떨어집니다. LINQ를 사용하여 코드의 가독성을 향상시킬 때 발생할 수 있는 성능 장단점에 유의하는 것이 좋습니다.

  1. 키워드에 커서를 놓습니다 foreach .

    IEnumerable 샘플을 사용하는 Foreach의 스크린샷

  2. Ctrl 키를 누릅니다+. 빠른 작업 및 리팩터링 메뉴를 트리거합니다.

    LINQ로 변환 메뉴 샘플의 스크린샷.

  3. LINQ로 변환 또는 Linq로 변환(호출 양식)을 선택합니다.

    LINQ 쿼리 결과 샘플의 스크린샷.

    LINQ 호출 양식 결과 샘플의 스크린샷.

예제 코드

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

LINQ를 foreach 문으로 변환

: C#, Visual Basic

이 리팩터링에서는 LINQ 쿼리 구문을foreach 문으로 변환합니다.

  1. 로 시작하는 전체 LINQ 쿼리를 from선택합니다.

    메모

    이 리팩터링에서는 메서드 구문이 아닌 쿼리 구문으로 표현된 LINQ 쿼리를 변환하는 데만 사용할 수 있습니다.

  2. Ctrl 키를+누르거나 코드 파일 여백에서 드라이버 스크류 드라이버 아이콘 아이콘을 클릭합니다.

    LINQ를 foreach 빠른 작업 메뉴로 변환하는 스크린샷.

  3. 'foreach'로 변환을 선택합니다. 또는 변경 내용 미리 보기를 선택하여 변경 내용 미리 보기 대화 상자를 연 다음 적용을 선택합니다.

메모

C#의 경우 이러한 리팩터링에서 생성된 코드는 루프의 반복 변수에 명시적 형식 또는 var 을 foreach 사용합니다. 생성된 코드의 형식(명시적 또는 암시적)은 범위에 있는 코드 스타일 설정에 따라 달라집니다. 이러한 특정 코드 스타일 설정은 도구>옵션>텍스트 편집기>C#>Code Style>General'var>기본 설정의 컴퓨터 수준 또는 EditorConfig 파일의 솔루션 수준에서 구성됩니다. 옵션에서 코드 스타일 설정을 변경하는 경우 변경 내용을 적용하려면 코드 파일을 다시 엽니다.

LINQ 식 간소화

적용 대상: C#

이 리팩터링은 다음 열거 가능한 메서드SingleOrDefault(), , Last(), Any()First()LastOrDefault()Count(), 및 FirstOrDefault()에 대한 Enumerable.Single() 인스턴스 SomeEnumerableType.Where(<LambdaExpression>).Single()SomeEnumerable.Single(<LambdaExpression>) 를 간소화합니다.

메서드에 대한 열거 가능 항목에 대한 불필요한 호출을 .Where() 제거하면 가독성과 경우에 따라 성능이 향상됩니다.

  1. 커서를 Visual Studio SomeEnumerableType.Where(<LambdaExpression>).Single() 인스턴스 내에 배치합니다.

  2. Ctrl 키를 누릅니다+. 빠른 작업 및 리팩터링 메뉴를 트리거합니다.

  3. LINQ 식 단순화를 선택합니다.

    LINQ 식 단순화 스크린샷