본문 바로가기

Programming/C#21

[C#] static, readonly 등 modifier 순서 강제하기 (.editorconfig) 이전에 다루었던 C# Coding Style 중에 이런 규칙이 있다.( 2024.07.05 - [Programming/C#] - C# Coding Style )When used on static fields, readonly should come after static (e.g. static readonly not readonly static)..editorconfig 파일은 다음과 같이 순서가 설정되어 있다.csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,asyncreadonly static, s.. 2024. 8. 14.
[C#] 어떤 프로그램이 설치되어 있는지 확인하기(windows 11) Windows 11에서 c#에서 특정 프로그램이 설치되어 있는지 확인하는 방법은 다음과 같다.예시 소스코드에서는 MongoDB의 설치여부를 확인한다.Console.WriteLine(CheckInstalled("MongoDB"));static bool CheckInstalled(string name){ using var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall") ?? Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"); if (ke.. 2024. 8. 10.
C# Coding Style C# 코딩룰이 헷갈릴 때 참고하면 좋을 것 같다.https://github.com/dotnet/runtime/blob/main/docs/coding-guidelines/coding-style.md runtime/docs/coding-guidelines/coding-style.md at main · dotnet/runtime.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps. - dotnet/runtimegithub.com 2024. 7. 5.
[C#] 반복문에서 삼항연산자 vs Func 뭐가 좋을까? 업무를 하다가 문득 이런 생각이 들었다. '다음과 같은 반복문 안에서 _condition은 항상 true 또는 false인데 매번 for문 안에서 체크하는 것이 비효율적인 것 같다.' for (var i = 0; i input * 2 : input => input; for (var i = 0; i < repeat; i++) { va.. 2024. 3. 8.
[C#] Linq SingleOrDefault() vs FirstOrDefault() Linq를 사용하다 보면 자주 쓰는 SingleOrDefault와 FirstOrDefault. 둘의 차이점이 뭘까? 테스트를 위한 코드를 준비한다. string?[] empty = []; string?[] oneElement = ["a"]; string?[] twoElements = ["a", "b"]; var firstEmpty = empty.FirstOrDefault(); var singleEmpty = empty.SingleOrDefault(); var firstOneElement = oneElement.FirstOrDefault(); var singleOneElement = oneElement.SingleOrDefault(); var firstTwoElement = twoElements.First.. 2024. 2. 17.
[C#] BsonDocument를 JSON으로 변환하기 MongoDB를 사용하면 BsonDocument와 친해지게 된다. 서버와 클라이언트의 통신에는 JSON 형태로 하는 경우가 많아서 JSON으로 변환이 필요한 상황이 있다. ToJson() BsonExtensionMethods를 이용하면 JSON string으로 변환할 수 있다. var actual = collection.Find(c => c.Id == targetId).FirstOrDefault(); var json = actual.ToJson(); 그런데 다음과 같이 ObjectId(), NumberDecimal(), IsoDate() 같은 값들이 표시된다. 그리고 이것은 JSON parsing error를 발생시킬 수 있다. { "_id": ObjectId("507f1f77bcf86cd79943901.. 2024. 2. 9.
[C#] Closure 문제 아래 코드는 어떤 결과가 출력될까? 정답은 "10"이 10번 출력된다. 클로저(Closure) Lexical scope 내의 변수를 사용하는 일급 함수를 말한다. Lexical scope 변수가 참조될 수 있는 영역. 일급 함수(first-class functions) 함수가 다른 변수를 다루는 것처럼 취급할 수 있을 때 그 언어는 일급 함수를 갖는다고 한다. C#에서 anonymous method, lambda expression로 일급 함수를 지원한다. 다시 예시로 돌아가자. List list = new(); for (int i = 0; i Debug.WriteLine($"{i}")); } list.ForEach(action => action()); .. 2022. 10. 21.
[C#] Any() vs Count() 성능 비교 50,000 records 테스트 결과 Any(), Count() 모두 Condition 없이 사용했을 때 빠르고 Condition을 사용하는 경우 Any()가 성능이 훨씬 좋았다. 하지만, Count property를 사용하는 경우가 가장 빠르다. Count() method는 모든 element들을 iteration 해야 하기 때문에 O(n)이다. 반면에 Count property는 _size private 변수를 직접 사용하므로 O(1)이다. 결론: Count property를 사용할 수 있으면 사용하고, 그렇지 않으면 Any()를 사용하자. https://code-maze.com/any-vs-count-dotnet/ 2022. 10. 12.
[C#] Linq로 INNER JOIN하기 SQL에서 두 테이블을 JOIN 해서 가져오기도 하지만 C#에서 각가의 두 테이블을 Linq를 활용해서 JOIN 할 수 있다. List tableA = new List(); List tableB = new List(); var join1 = tableA.Join( tableB, a => a.Code, b => b.Code, (a, b) => new { b.ColumnB, a.ColumnA }); var join2 = from a in tableA join b in tableB on a.Code equals b.Code select new { b.ColumnB, a.ColumnA }; 위 두 가지 방식으로 사용할 수 있는데 join1은 Linq query syntax, join2는 Linq method c.. 2022. 8. 24.