본문 바로가기
반응형

프로그래밍/C#117

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.
예제로 복습하는 C# 쓰레드 생성 C# 쓰레드 생성 System.Threading.Thread라는 클래스를 이용해서 쓰레드를 생성한다. Run()이라는 함수를 생성해서 메인 쓰레드에서 실행하고 별도로 생성한 쓰레드에서 동시에 실행시킨다. class Program { static void Main(string[] args) { new Program().DoTest(); } void DoTest() { // 새로운 쓰레드에서 Run() 실행 Thread t1 = new Thread(new ThreadStart(Run)); t1.Start(); // 메인쓰레드에서 Run() 실행 Run(); } void Run() { Console.WriteLine($"Thread#{Thread.CurrentThread.ManagedThreadId}: Beg.. 2023. 6. 1.
읽기 / 쓰기 프로퍼티(Property) 선언 및 사용 방법 읽기 / 쓰기 프로퍼티 프로퍼티(property)는 개체 데이터에 대한 액세스가 보호, 제어, 확인되지 않을 위험 없이 공용 데이터 멤버의 편리함을 제공합니다. 프로퍼티는 접근자(accessors)를 선언합니다. 기본 데이터 멤버에서 값을 할당하고 검색하는 특수 메서드입니다. set 접근자를 통해 데이터 멤버를 할당할 수 있으며, get 접근자는 데이터 멤버 값을 검색합니다. class Student { private string _name = "N/A"; private int _age = 0; public string Name { get { return _name; } set { _name = value; } } public int Age { get { return _age; } set { _age =.. 2023. 5. 31.