본문 바로가기

c#109

C# Linq - Enumerable.OfType() Enumerable.OfType(IEnumerable) 메서드 public static System.Collections.Generic.IEnumerable OfType (this System.Collections.IEnumerable source); 형식 매개 변수 TResult 스퀀스의 요소를 필터링할 형식 매개변수 source IEnumerable 요소를 필터링할 IEnumerable 반환 IEnumerable 형식의 입력 시퀀스에서 가져온 요소가 들어있는 IEnumerable IEnumerable 컬렉션에서 원하는 TResult 형식을 선별하고 싶을 때 사용한다. 예제 코드 System.Collections.ArrayList fruits = new System.Collections.ArrayLis.. 2024. 2. 16.
C# Linq - Enumerable.Where() Enumerable.Where(IEnumerable, Func) 메서드 public static System.Collections.Generic.IEnumerable Where(this System.Collections.Generic.IEnumerable source,Func predicate); 매개변수 source IEnumerable 필터링할 IEnumerable predicate Func 각 요소를 조건에 대해 테스트하는 함수 특정 조건으로 필터링해서 해당 조건에 부합하는 요소들만 취합하고 싶을 때 사용한다. 예제 코드 List fruits = new List { "apple", "passionfruit", "banana", "mango", "orange", "blueberry", "grape",.. 2024. 2. 15.
C# Linq - Enumerable.All() Enumerable.All(IEnumerable, Func) 메서드 public static bool All (this System.Collections.Generic.IEnumerable source, Func predicate); 매개변수 source IEnumerable predicate를 적용할 항목들을 가지고 있는 IEnumerable predicate Func 각 항목에 적용할 조건을 가진 함수 반환값 true - 모든 항목들이 predicate에 설정한 테스트를 통과하면 true를 반환한다. 또는 시퀀스가 empty일 경우 false - 그 이외의 경우 false를 반환한다. predicate를 통해서 모든 항목에 대한 특정한 테스트를 진행하고 이에 대한 결과를 확인하고 싶을때 사용한다. 예.. 2024. 2. 15.
C# yield return을 이용한 소수 생성기 yield return을 이용한 지연 계산 yield return에 대해서 공부하면서 대량의 데이터를 다루기 편해지고 지연 로딩이 강점이라는 설명글들을 많이 읽었지만 "그래서 이걸 대체 어디에 사용하지?"라는 의문에 계속해서 들고 있었다. 그러다가 피보나치 수열을 만드는 예제를 보고 yield return을 사용해서 소수를 만드는 메서드를 만들면 좋을거 같다는 생각이 들어서 코드를 한번 짜봤다. 사용자는 자기가 필요한만큼 소수를 꺼내쓰기만 하면 된다. 이에 대한 계산은 그때 그때 온-디멘드(OnDemand)로 이루어진다. 예제 public static IEnumerable GeneratePrimeNumber() { int start = 2; while (true) { for (int i = 2; i < .. 2024. 2. 14.
C# yield 이해하기 C# yield 이해하기 yield는 iterator를 포함하는 메서드에서 사용되는 강력한 키워드이다. yield를 사용하면 enumerable 배열을 간단하게 반환할 수 있다. 하나의 요소를 해당 시점에서 반환하기 때문에 기존의 전통적인 반환 방법과는 다르다. 지연 평가(lazy evaluation) 성능 향상(increased perforamance) 대량의 데이터, 복잡한 데이터 구조를 다루는데 효과적 iteration 간의 상태 지속이 가능 기본 구문 public IEnumerable GetNumbers() { for (int i = 0; i < 10; i++) { yield return i; } } 위의 예에서, GetNumbers()는 0에서 9까지의 정수 시퀀스를 생성한다. yield ret.. 2024. 2. 14.
Effective C# Item 36 : 쿼리 표현식과 메서드 호출 구문이 어떻게 대응되는지 이해하라 쿼리 표현식과 메서드 호출 구문이 어떻게 대응되는지 이해하라 LINQ는 쿼리 언어와 그 쿼리 언어를 일련의 메서드 집합으로 변환하는 2개의 핵심 구조를 기반으로 한다. C# 컴파일러는 쿼리 언어로 작성된 쿼리 표현식을 메서드 호출 구문으로 변환해 준다. 클래스 사용자의 관점에서 볼 때 쿼리 표현식은 단순히 메서드 호출 구문의 다른 표현 방법일 뿐이다. where 절은 적절한 인자를 이용하여 Where()라는 메서드를 호출하는 코드로 변환된다. 클래스 설계자의 관점에서는 기본 프레임워크에서 제공하는 메서드들이 어떻게 구현됐는지를 살펴보고 더 나은 방법으로 구현할 수 있을지를 판단해야 한다. 더 나은 구현 방법이 없다면 기본 라이브러리를 그대로 사용하면 되겠지만 개선의 가능성이 있다면 우선 쿼리 표현식이 메.. 2024. 2. 13.