전체 글

Software, 기타 등등..
C#/Language

C# - Language - Cast expression

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 ..

C#/Language

C# - Language - as operator

Introduction as 연산자는 식의 결과를 지정된 형식 (참조 또는 nullable 값 형식) 으로 변환한다. 변환할 수 없는 경우 null을 반환하며, 예외를 출력하지 않는다. as 식은 아래와 같이 표현한다. expression as type expression은 값을 반환하는 식, type은 형식 또는 형식 매개 변수의 이름이다. 위 식은 아래 식의 축약형이다. expression is type ? (type)(expression) : (type)null as 식은 아래 항목 중 하나를 만족하면 변환된 객체를 반환한다. T의 파생 형식 T 인터페이스 구현 T 형식으로 boxing 또는 unboxing 가능한 경우 as 연산자는 숫자 변환에 대해서는 고려하지 않으며 사용자 정의 변환을 수행할 ..

C#/Language

C# - Language - is operator

Introduction is 연산자는 주어진 식의 결과를 이용하여 다음 작업을 수행한다. 형식 일치 여부 확인 패턴 일치 여부 확인 is 식은 아래와 같이 표현한다. expression is type // 1 expression is pattern // 2 expression은 값을 반환하는 식, type은 형식 또는 형식 매개 변수의 이름이다. 여기서 type은 무명 메서드 또는 람다 식으로 표현할 수 없다. expression은 값을 반환하는 식, pattern은 일치 여부를 확인할 패턴이다. 형식 일치 여부 확인 is 연산자를 이용하여 형식 일치 여부를 확인할 수 있다. 주어진 식이 null이 아닌 경우, is 연산자는 다음 조건 중 하나를 만족하면 true를 반환한다. T or T? (HasVal..

C#/Language

C# - Language - List patterns

Introduction 다음 C# 식과 문은 패턴을 지원한다. is 식 switch 식 switch 문 여기서는 C# 11부터 지원되는 목록 패턴에 대해 설명한다. Example 목록 패턴은 배열, 컬렉션에 대해 특정 시퀀스와 매칭하는 기능을 제공한다. List ints = [-1, 2, 3]; // 기본 사용 Console.WriteLine(ints switch { [-1, 2, 3] => true, _ => false }); /* output: True */ // 패턴 중첩 Console.WriteLine(ints switch { [ mid, _ => false }); /* output: 2 */ 목록 패턴은 범위 연산자 (..)를 통한 부분 매칭을 지원한다..

C#/Language

C# - Language - Discard, var pattern

Introduction 다음 C# 식과 문은 패턴을 지원한다. is 식 switch 식 switch 문 여기서는 다음 패턴을 설명한다. 무시 (_) 패턴 : null을 포함한 모든 식을 매칭한다. var 패턴 : null을 포함한 모든 식을 매칭하고 지역 변수에 할당한다. _ 패턴 _ 패턴은 switch 식에만 사용이 가능하고, switch 문의 default와 같은 기능을 한다. switch 식에서 _을 사용하지 않고 모든 경우를 커버하지 못하면 컴파일러는 경고를 생성한다. (CS8509) int? foo = null; Console.WriteLine(foo switch { 1 => 1, 2 => 2, _ => "Not recognized" }); /* output: Not recognized */ v..

C#/Language

C# - Language - Property, positional patterns

Introduction 다음 C# 식과 문은 패턴을 지원한다. is 식 switch 식 switch 문 여기서는 다음 패턴을 설명한다. 속성 패턴 : 각 패턴에 대해 속성, 필드를 매칭 위치 패턴 : 식을 분해하고 패턴 매칭 속성 패턴 속성 패턴은 중괄호 { } 를 이용하여 매칭할 속성을 지정한다. public record Foo(int A, int B); var foo = new Foo(1, 2); Console.WriteLine(foo switch { { A: "A "B 0, B: > 0 } => "A > 0, B > 0", _ => "Not recognized" }); /* output: A > 0, B > 0 */ 속성 패..

C#/Language

C# - Language - Logical patterns

Introduction 다음 C# 식과 문은 패턴을 지원한다. is 식 switch 식 switch 문 여기서는 각 패턴을 조합할 수 있는 논리 패턴을 설명한다. not (부정 패턴) not 패턴은 지정된 식과 일치하지 않는 경우 true를 반환한다. int? foo = 7; if (foo is not int) Console.WriteLine("foo is not int"); else if (foo is int) Console.WriteLine("foo is int"); /* output: foo is int */ and (결합 패턴) and 패턴은 지정된 모든 식이 일치하는 경우 true를 반환한다. int foo = 7; Console.WriteLine(foo switch { "foo <..

C#/Language

C# - Language - Relational patterns

Introduction 다음 C# 식과 문은 패턴을 지원한다. is 식 switch 식 switch 문 여기서는 식 결과가 지정된 상수와 비교할 수 있는 관계형 패턴을 설명한다. 관계형 패턴에는 다음 형식을 사용할 수 있다. 정수, 부동 소수점 char enum Example // is 식 int foo = 7; if (foo is < 0) Console.WriteLine("foo < 0"); else if (foo is < 5) Console.WriteLine("foo < 5"); else if (foo is < 10) Console.WriteLine("foo < 10"); /* output: foo < 10 */ // switch 식 int foo = 7; Console.WriteLine(foo sw..

C#/Language

C# - Language - Constant pattern

Introduction 다음 C# 식과 문은 패턴을 지원한다. is 식 switch 식 switch 문 여기서는 식 결과가 지정된 상수와 같은지 확인할 수 있는 상수 패턴을 설명한다. 상수 패턴에는 상수 형식으로 변환할 수 있는 형식을 사용할 수 있다. 정수, 부동 소수점 char string bool enum const 필드 또는 로컬 변수의 이름 Span, ReadOnlySpan (C# 11) null Example // is 식 int foo = 7; if (foo is 7) Console.WriteLine("foo is 7"); else Console.WriteLine("foo is not 7"); /* output: foo is 7 */ // switch 식 int foo = 7; Console..

C#/Language

C# - Language - Type, declaration patterns

Introduction 다음 C# 식과 문은 패턴을 지원한다. is 식 switch 식 switch 문 여기서는 다음 패턴을 설명한다. 형식 패턴 : 형식 확인 선언 패턴 : 형식 확인 및 성공 시 결과를 변수에 할당 특정 객체가 T 형식임을 확인하는 경우, 아래 형식 조건 중 하나를 만족하면 true가 반환된다. T or T? T의 파생 형식 T의 인터페이스 구현 T 형식으로 boxing 또는 unboxing 가능 형식 패턴 식의 형식을 확인하려는 경우 다음과 같이 형식 패턴을 사용할 수 있다. namespace TypePattern { public interface Common { } public class Foo : Common { } public class Bar : Common { } } // ..

C#/Language

C# - Language - Index, Range operators (^, ..)

Introduction 인덱스 (^), 범위 (..) 연산자는 Count, Length와 같은 int getter 프로퍼티를 가진 형식에 사용할 수 있다. 컬렉션 식 또한 여기에 포함된다. ^ 연산자는 요소 위치를 거꾸로 표현한다. ^n으로 위치를 지정한다. n의 자리에 시퀀스 길이를 넣는 경우 첫번째 요소, ^1은 마지막 요소이다. .. 연산자는 요소의 범위를 나타낸다. 표현식은 a..b이며 [a, b)를 의미한다. ^ 연산자와 같이 사용할 수 있다. 아래는 ^, .. 연산자의 사용법을 보여준다. ^ 연산자 string foo = "Hello, World!"; Console.WriteLine(foo[^2]); // d int[] bar = [1, 2, 3, 4, 5]; Console.WriteLine(..

C#/Language

C# - Language - Invocation expression ( () )

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 조건부 연산자 및 식 - 호..

Peponi_
Peponi