Introduction stackalloc 식은 스택에 메모리 블록을 할당한다. 할당된 메모리 블록은 메서드가 반환될 때 자동으로 해제되며 명시적으로 해제가 불가능하다. 할당된 메모리 블록은 GC의 대상이 아니며 fixed 문을 사용하여 피닝하지 않아도 된다. Example stackalloc 식은 다음 형식 중 하나에 할당할 수 있다. System.Span : T는 비관리형 형식 static void Main(string[] args) { Span foo = stackalloc int[3] { 1, 2, 3 }; Span bar = stackalloc int[] { 1, 2, 3 }; Console.WriteLine(foo[1]); Console.WriteLine(bar[1]); } /* output:..
Introduction 캐스트 식은 (T)expression으로 나타내며, 명시적으로 expression을 T로 형식 변환한다. 명시적 변환이 불가한 경우 컴파일 타임 오류가 발생한다. 런타임에 명시적 변환에 실패하는 경우 System.InvalidCastException, System.OverflowException 등이 발생할 수 있다. Example 다음은 캐스트 식을 사용하는 사례를 보여준다. long foo = 123; Console.WriteLine((ushort)foo); List bar = [1, 2, 3]; IEnumerable baz = (IEnumerable)bar; Console.WriteLine(string.Join(", ", baz)); /* output: 123 1, 2, 3 ..
Introduction 다음 멤버는 괄호 ()를 사용하여 호출할 수 있다. 생성자 메서드 대리자 Example // Constructor var foo = new List(); // Method Console.WriteLine("Hello, World!"); // Delegate delegate void ConsoleWriter(string message); static void Main(string[] args) { ConsoleWriter writer = new(Write); writer("Hello, World!"); } static void Write(string message) => Console.WriteLine(message); 참조 자료 멤버 액세스 및 null 조건부 연산자 및 식 - 호..
Introduction . 기호는 네임스페이스 및 형식 멤버에 액세스할 때 사용한다. Using 지시문 using 지시문을 사용할 때 .을 사용하여 중첩된 네임스페이스 또는 형식에 접근할 수 있다. using System.ComponentModel; using static System.Console; 정규화된 형식 .을 사용하여 정규화된 이름을 만들고 네임스페이스 내의 형식에 액세스할 수 있다. using 지시문을 사용하면 정규화를 하지 않아도 된다. System.Collections.Generic.List ints = [1, 2, 3, 4, 5]; System.Console.WriteLine(string.Join(", ", ints)); /* output: 1, 2, 3, 4, 5 */ 멤버 접근 .을..
Introduction C# 12부터, 컬렉션 및 배열은 컬렉션 식 ([]) 을 이용하여 초기화가 가능하다. 본문에서는 List를 활용하여 예시를 작성한다. 다음 예시와 같이, 컬렉션 식을 사용하여 코드를 간략하게 구성할 수 있다. // C# 11 List foo = new() { 1, 2, 3 }; // C# 12 List bar = [1, 2, 3]; Example 컬렉션 식은 다양한 형태로 사용 가능하다. internal class Program { // 필드 private List _field = [1, 2, 3]; // 프로퍼티 private List _property => [1, 2, 3]; static void Main(string[] args) { // 변수 List variable = [..
Introduction switch 식은 패턴 매칭을 기반으로 식을 계산한다. switch 문은 switch 문을 참조한다. switch 식은 다음과 같이 구성한다. x switch { Condition1 => Value1, Condition2 => Value2 }; x : 입력 값 스위치 암 (arm) : ,로 구분 된 각각의 식 ConditionX : 조건 (패턴 또는 케이스 가드) ValueX : 반환 식 switch 식의 결과는 조건이 true로 반환되는 첫번째 arm 반환 식의 값이다. 상위 arm으로 인해 하위 arm의 값 출력이 불가한 경우 컴파일러에서 오류가 발생한다. switch 식에 사용 가능한 패턴은 패턴 일치 - 패턴의 is 및 switch 식, 연산자 and, or 및 not을 참..
Introduction with 식은 형식의 일부를 수정한 복사를 가능하게 한다. public record Foo(bool X, int Y); public static void Main() { var foo = new Foo(true, 100); var bar = foo with { Y = 50 }; Console.WriteLine(foo); Console.WriteLine(bar); } /* output: Foo { X = True, Y = 100 } Foo { X = True, Y = 50 } */ C# 10부터는 구조체, 익명 형식 또한 with 식을 사용할 수 있다. public struct Foo { public bool X; public int Y; public Foo(bool x, int y..
Introduction 기본값 식은 주어진 형식의 기본값을 생성한다. default 키워드를 이용하여 default 연산자, default 리터럴을 호출할 수 있다. default 연산자 default 연산자의 인수는 형식 또는 형식 매개 변수가 되어야 한다. Console.WriteLine(default(bool)); Console.WriteLine(default(int)); WriteDefaultValue(); WriteDefaultValue(); void WriteDefaultValue() => Console.WriteLine(default(T)); /* output: False 0 False 0 */ default 리터럴 컴파일러가 형식을 유추할 수 있는 경우 default 키워드를 사용하여 기본..
Introduction nameof 식은 변수, 형식, 멤버의 이름을 문자열 상수로 생성한다. 컴파일 타임에 계산되어 상수로 변환된다. 형식 또는 네임스페이스가 피연산자에 포함되더라도 생성된 이름은 정규화되지 않는다. 피연산자가 축자 식별자인 경우 @ 문자는 이름에서 제외된다. Example static void Main(string[] args) { Console.WriteLine(nameof(Main)); Console.WriteLine(nameof(System)); Console.WriteLine(nameof(System.Console)); // 정규화되지 않고 Console만 출력 Console.WriteLine(nameof(System.Drawing.Point.X)); // 정규화되지 않고 X만..