본문 바로가기

프로그래밍/C#101

C# 식 본문 멤버(Expression-bodied member) 식 본문 멤버(Expression-bodied member) C#의 속성이나 메서드는 보통 여러 문장(statement)들로 구성된 블록을 실행하게 된다. 하지만 속성이나 메서드의 Body 블록이 간단한 경우, Statement Block을 사용하는 대신 간단한 함수식(expression)을 사용할 수 있는데, 이를 Expression-bodied member 표현이라고 부른다. 이는 기존의 람다식과 유사한 것으로 속성이나 메서드 Body를 간략한 람다식처럼 표현한 것이다. 예를 들어, 아래 예제에서 처럼 기존에는 Area 속성의 get 블록 안에 리턴 식을 표현했지만, C# 6.0에서는 이를 간략하게 람다 화살표로 표현하고 있다. 종종 코드에서 =>만 달랑 있어서 = 대입 연산자의 오타인 줄 알았는데 .. 2023. 6. 28.
C# where 제네릭 형식 제약(generic type constraint) where 제약 조건 C# 제네릭 사용 시에 where 키워드를 사용하여 형식을 제약하는 것이 가능하다. where T : struct 형식 인수는 null을 허용하지 않는 값 형식이어야 한다. 모든 값 형식에 액세스 할 수 있는 매개 변수가 없는 생성자가 있으므로, struct 제약 조건은 new() 제약 조건을 나타내고 new() 제약 조건과 결합할 수 없다. strcut 제약조건을 unmanaged 제약 조건과 결합할 수 없다. where T : class 형식 인수는 참조 형식이어야 한다. 이 제약 조건은 모든 클래스, 인터페이스, 대리자 또는 배열 형식에도 적용된다. where T : class? 형식 인수는 null을 허용하거나 null을 허용하지 않는 참조 형식이어야 한다. 이 제약 조건은 .. 2023. 6. 28.
Queue vs ConcurrentQueue로 쓰레드 환경에서 테스트 Queue로 실행한 경우 thread-safe가 보장되지 않은 Queue로 큐를 선언 using System; using System.Collections.Generic; using System.Threading.Tasks; class CQ_EnqueueDequeuePeek { static void Main() { Queue cq = new Queue(); for (int i = 0; i { int localSum = 0; int localValue; while (cq.TryDequeue(out localValue)) { localSum += localValue; } outerS.. 2023. 6. 27.
C# 익명 타입 (Anonymous Type) 익명 타입(Anonymous Type)이란? C#에서 어떤 클래스를 사용하기 위해서는 일반적으로 먼저 클래스를 정의한 후 사용한다. 하지만 C# 3.0부터 클래스를 미리 정의하지 않고 사용할 수 있게 하는 익명 타입(Anonymous Type)을 지원하게 되었다. 익명 타입은 new { ... }와 같은 형식을 사용하며, new 블록 안에 속성 = 값 할당을 하고, 각 속성/값은 콤마로 분리한다. 익명 타입은 읽기 전용이므로 속성값을 갱신할 수 없다. C# 키워드 var는 컴파일러가 타입을 추론해서 찾아내도록 할 때 사용되는데, 익명 타입 객체를 변수에 할당할 때는 특별히 타입명이 없으므로 var를 사용한다. 컴파일러는 익명 타입에 대해 내부적으로 임의의 클래스를 생성하여 사용하게 된다. // 익명 타입.. 2023. 6. 19.
C# List에서 HashSet으로 변환하기 List에서 HashSet으로 변환하기 1. HashSet 생성자 사용하기 HashSet은 유일한 요소들만을 포함한다. 리스트 안에 포함된 중복된 요소들은 버려진다. using System; using System.Collections.Generic; public class Example { public static void Main() { List list = new List { 1, 3, 3, 2, 4 }; HashSet set = new HashSet(list); Console.WriteLine(String.Join(",", set)); } } /* Output: 1,3,2,4 */ 2. Enumerable.ToHashSet() 메소드 (System.Linq) HashSet를 만들기 위해서 ToHa.. 2023. 6. 15.
계속 실행되어야 하는 작업을 위한 BackgroundService in .NET Core IHostedService .NET Core 2.1에서 추가된 IHostedService은 개발자에게 관리되는 실행시간에서 백그라운드 서비스들을 실행할 수 있도록 해준다. 이 기능은 최소한의 구현만을 사용이 가능합니다. public interface IHostedService { Task StartAsync(CancellationToken cancellationToken); Task StopAsync(CancellationToken cancellationToken); } .NET Core의 의존성 주입을 해줍니다. 간단하게 구현이 가능하다! var hostBuilder = new HostBuilder() .ConfigureServices(services => services.AddHostedService.. 2023. 6. 5.