수색…


비고

C # 버전 3.0은 .Net 버전 3.5의 일부로 릴리스되었습니다. 이 버전에서 추가 된 많은 기능은 LINQ (Language INtegrated Queries)를 지원합니다.

추가 기능 목록 :

  • LINQ
  • 람다 식
  • 확장 메소드
  • 익명 유형
  • 암시 적으로 입력 된 변수
  • 개체 및 컬렉션 초기화 프로그램
  • 자동으로 구현 된 속성
  • 표현 트리

암시 적으로 입력 된 변수 (var)

var 키워드를 사용하여 프로그래머는 컴파일시 변수를 암시 적으로 입력 할 수 있습니다. var 선언은 명시 적으로 선언 된 변수와 동일한 유형입니다.

var squaredNumber = 10 * 10;
var squaredNumberDouble = 10.0 * 10.0;
var builder = new StringBuilder();
var anonymousObject = new
{ 
    One = SquaredNumber,
    Two = SquaredNumberDouble,
    Three = Builder
}

위 변수의 유형은 각각 int , double , StringBuilder 및 익명 유형입니다.

var 변수는 동적으로 입력되지 않는다는 점에 유의해야합니다. SquaredNumber = Builder intStringBuilder 의 인스턴스로 설정하려고하므로 SquaredNumber = Builder 가 유효하지 않습니다.

언어 통합 쿼리 (LINQ)

//Example 1
int[] array = { 1, 5, 2, 10, 7 };

// Select squares of all odd numbers in the array sorted in descending order
IEnumerable<int> query = from x in array
                         where x % 2 == 1
                         orderby x descending
                         select x * x;
// Result: 49, 25, 1

C # 3.0, LINQ 하위 섹션의 위키 백과 문서 예제

예제 1은 SQL 쿼리와 비슷하게 디자인 된 쿼리 구문을 사용합니다.

//Example 2
IEnumerable<int> query = array.Where(x => x % 2 == 1)
    .OrderByDescending(x => x)
    .Select(x => x * x);
// Result: 49, 25, 1 using 'array' as defined in previous example

C # 3.0, LINQ 하위 섹션의 위키 백과 문서 예제

예제 2는 메소드 구문을 사용하여 예제 1과 동일한 결과를 얻습니다.

C #에서 LINQ 쿼리 구문은 LINQ 메서드 구문에 대한 구문 설탕 이라는 점에 유의해야합니다. 컴파일러는 컴파일 타임에 쿼리를 메소드 호출로 변환합니다. 일부 쿼리는 메서드 구문으로 표현되어야합니다. MSDN에서 - "예를 들어, 지정된 조건과 일치하는 요소의 수를 검색하는 쿼리를 표현하기 위해 메서드 호출을 사용해야합니다."

람다 표현식

Lambda Expresions는 암시 적으로 형식화 된 매개 변수와 반환 값을 허용하는 익명 메서드 의 확장입니다. 그들의 구문은 익명 메소드보다 덜 장황하고 함수형 프로그래밍 스타일을 따른다.

using System;
using System.Collections.Generic;
using System.Linq;
                    
public class Program
{
    public static void Main()
    {
        var numberList = new List<int> {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        var sumOfSquares = numberList.Select( number => number * number )
            .Aggregate( (int first, int second) => { return first + second; } );
        Console.WriteLine( sumOfSquares );
    }
}

위의 코드는 1에서 10까지의 숫자의 제곱의 합을 콘솔에 출력합니다.

첫 번째 람다 식은 목록의 숫자를 제곱합니다. 매개 변수가 하나 뿐이므로 괄호를 생략 할 수 있습니다. 원하는 경우 괄호를 포함 할 수 있습니다.

.Select( (number) => number * number);

명시 적으로 매개 변수를 입력하고 괄호를 입력해야합니다.

.Select( (int number) => number * number);

람다 본문은 표현식이며 암시 적으로 반환됩니다. 원하면 문장 본문을 사용할 수 있습니다. 이것은 좀 더 복잡한 lambdas에 유용합니다.

.Select( number => { return number * number; } );

select 메서드는 계산 된 값이있는 새 IEnumerable을 반환합니다.

두 번째 람다 식은 select 메서드에서 반환 된 목록의 숫자를 합합니다. 여러 매개 변수가 있으므로 괄호가 필요합니다. 매개 변수의 유형이 명시 적으로 입력되었지만 필수는 아닙니다. 아래의 방법은 동일합니다.

.Aggregate( (first, second) => { return first + second; } );

이 중 하나입니다 :

.Aggregate( (int first, int second) => first + second );

익명 유형

익명 형식은 형식을 먼저 명시 적으로 정의하지 않고도 읽기 전용 속성 집합을 단일 개체로 캡슐화하는 편리한 방법을 제공합니다. 형식 이름은 컴파일러에서 생성되며 소스 코드 수준에서는 사용할 수 없습니다. 각 속성의 유형은 컴파일러에 의해 추론됩니다.

new 키워드 뒤에 중괄호 ( { ) 를 사용하여 익명 형식을 만들 수 있습니다. 중괄호 안에는 아래 코드와 같은 속성을 정의 할 수 있습니다.

var v = new { Amount = 108, Message = "Hello" };

익명 형식의 배열을 만들 수도 있습니다. 아래 코드를 참조하십시오.

var a = new[] { 
    new { 
        Fruit = "Apple", 
        Color = "Red" 
    },
    new {
        Fruit = "Banana",
        Color = "Yellow"
    }
};

또는 LINQ 쿼리와 함께 사용하십시오.

var productQuery = from prod in products
                   select new { prod.Color, prod.Price };


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow