반응형

linq 3

[Effective C#] 아이템 43: 쿼리 결과의 의미를 명확히 강제하고, Single()과 First()를 사용해라

Single() : 정확히 하나의 요소만 반환한다. 만약 쿼리 결과에 어떤 요소도 포함되지 않거나, 여러 개의 요소가 포함되는 경우에는 Single()은 예외를 유발한다. First() : 하나의 요소만 반환 될 것을 기대하지만, 때로는 여러 개의 값이 반환 되는 경우를 허용하고 싶을 때 사용한다. 시퀀스가 비어있는 경우 예외를 발생시킨다. FirstOrDefault() : 하나의 요소만 반환 될 것을 기대하지만, 때로는 여러 개의 값이 반환 되는 경우를 허용하고 싶을 때 사용한다. 시퀀스가 비어있는 경우 기본값을 반환한다. 특정 위치에 있는 요소를 찾을 때 고려해야 할 것 쿼리를 구성하기 위한 다른 속성이 있는지 결과 시퀀스가 IList를 지원하는지 인덱스 작업을 지원하는지

개발공부/C# 2021.12.18

[Effective C#] 아이템 30: 루프보다 쿼리 구문이 낫다.

쿼리 구문의 장점 프로그램의 논리를 명령형 방식에서 선언적인 방식으로 전환할 수 있다. 질의의 내용을 구성할 수 있다. 개별 항목에 대해 수행하려는 작업의 수행 시기를 연기할 수 있다. 사용자의 의도를 더 명확하게 드러낼 수 있다. 다양하게 조합할 수 있다. 루프, 쿼리, 확장 메서드 비교 루프 var foo = new int[100]; for (var num = 0; num < foo.Length; num++) { foo[num] = num * num; } foreach (int i in foo) { Console.WriteLine(i.ToString()); } 쿼리 var foo = (from n in Enumerable.Range(0, 100) select n * n).ToArray(); 개별 항목..

개발공부/C# 2021.12.06

[Effective C#] 아이템 29 : 시퀀스를 반환해야 하는 경우 컬렉션을 반환하기보다 이터레이터를 반환하는 것이 낫다.

LINQ 란? 지연된 쿼리를 지원하고 다양한 데이터 저장소에 대해 쿼리를 수행할 수 있는 통합 구문을 제공하는 기능. C# 3.0에 추가된 기능이다. 쿼리 제공자를 자유롭게 구현할 수 있다. LINQ의 목표 데이터 소스의 유형과 상관없이 동일한 작업을 수행하는 코드를 손쉽게 작성하는 것. 시퀀스를 반환해야 할 때 메서드를 작성하다보면 단일의 객체를 반환하기보다 일련의 시퀀스를 반환해야 하는 경우가 있다. 이때 컬렉션보다 이터레이터를 반환하는 것이 좋다. 이터레이터 메서드란? 호출자가 요청한 시퀀스를 생성하기 위해 yield return 문을 사용하는 메서드. 언제 이터레이터 메서드를 이용하여 시퀀스를 생성해야 하는가? 메서드가 반환하는 시퀀스를 캐싱할 때 IEnumerable와 같은 인터페이스를 반환하도..

개발공부/C# 2021.12.05