C# Language
C # 3.0 기능
수색…
비고
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
int
을 StringBuilder
의 인스턴스로 설정하려고하므로 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 };