본문 바로가기

반응형

Programming/C#

(13)
C# 버전 지금 나는 어떤 버전의 C#을 쓰고 있을까? 최신 C# 컴파일러는 프로젝트의 Target Framework를 기반으로 기본 버전을 결정한다. (Visual Studio 2019 이상) 즉, 명시적으로 바꾸지 않았다면 현재 프로젝트의 Target Framework에 따라 C# 버전이 결정된다. Target Framework Version C# Default Version .NET 6.x C# 10.0 .NET 5.x C# 9.0 .NET Core 3.x C# 8.0 .NET Core 2.x C# 7.3 .NET Standard 2.1 C# 8.0 .NET Standard 2.0 C# 7.3 .NET Standard 1.x C# 7.3 .NET Framework All C# 7.3 C# 버전을 명시적으로 설..
Using custom class as C# Dictionary key type 요약 : 직접 만든 클래스를 Dictionary의 key로 사용하고 싶을 경우 추가적으로 해야 할 작업을 알아본다. 1. 아래와 같이 Point class를 만들고 좌표가 같을 경우 같은 Point로 인식하게 하고 싶다. public class Point { public Point(int x, int y) { X = x; Y = y; } public int X { get; set; } public int Y { get; set; } } 현재 상태에서 좌표가 같은 두 Point를 Dictionary에 Add()하면 예외 없이 정상적으로 추가된다. var p1 = new Point(0, 0); var p2 = new Point(0, 0); var points = new Dictionary(); points...
C# loop For vs Foreach 반복문 작성 시 For와 Foreach 어떤 것을 사용하는 것이 좋을까? 당연하게도 정답은 상황에 따라 다르다 이지만 개인적으로 실제 프로젝트에선 Default로 Foreach를 알고리즘 풀이에선 Default로 For를 사용하는 편이다. 이렇게 사용하는 가장 큰 이유는 Foreach의 경우 확장성, For의 경우 속도가 빠르기 때문이다. 아래는 각각의 장단점이다. Foreach 장점 : 다양한 컬렉션 유형에서 동작하는 코드를 짤 수 있음 (확장성) public void Write(IEnumerable somethingToWrite) { foreach (var item in somethingToWrite) { Console.WriteLine(item); } } 보다 직관적 보다 간결한 코드 단점 inde..
C# Func vs Action vs Predicate Func delegate return value linq 예시 var ids = list.Select(d => d.Id); Action delegate linq 예시 list.ForEach(d => { d.SomeProperty + 1; }); Predicate Func public delegate bool Predicate(T obj); ref : https://github.com/microsoft/referencesource/blob/master/mscorlib/system/action.cs microsoft/referencesource Source from the Microsoft .NET Reference Source that represent a subset of the .NET Framewor..
C# reverse string use linq 알고리즘 문제풀이 중 문자열을 뒤집고 싶었고 Reverse 함수가 있길래 별생각 없이 사용했다가 문제를 발견했다. 간략한 예제로 아래 코드에 대한 내 예상결과는 "tseT"였다. string word = "Test"; Debug.Write(word.Reverse()); 하지만 실제 결과는 타입 정보 문자열이 출력되고 있다. 원인과 해결방법은 아래와 같다. 원인 Reverse 메서드를 F12(정의로 이동)로 확인해보니 음..? Linq에 있는 Enumerable 클래스의 Reverse 메서드였다. public static IEnumerable Reverse(this IEnumerable source); 즉, string 타입이 기본으로 제공하는 Reverse 메서드가 없었고 Enumerable의 확장(ex..
C# Property Vs Field and ref keyword 아무 생각 없이 Class의 Property를 함수의 ref 타입 파라미터로 넘기려다가 아래 에러를 만났다. error[kr] : 속성 또는 인덱서는 out 또는 ref 매개 변수로 전달할 수 없습니다. error[en] : A property or indexer may not be passed as an out or ref parameter. Q1. 왜 넘길 수 없는가? 왜 넘길 수 없는지 이해하려면 먼저 Property가 기본적으로 어떻게 동작하는지 알아야 한다. 아래와 같은 Property를 가정해보자 public int TestProperty { get; set; } 컴파일러는 컴파일타임에 아래와 비슷한 모양으로 testProperty라는 필드 생성 및 Get, Set 메서드를 생성한다. 이후 T..

반응형