프로그래밍 언어/C#
-
c#을 사용하다 보면, 메서드에 참조 형식(class, interface, delegate 등...)을 매개변수에 전달해야 할 일이 빈번하게 발생한다. 값 형식: Pass by value int, byte, 구조체 등의 값 형식 변수를 매개변수에 전달할 때는 Pass by value로 동작하는 것은 웬만하면 모두 인지하고 있을 것이다. 즉 메서드에 변수를 전달할 때 값 복사가 일어나게 되며, 메서드 내에서 변수의 값을 수정하더라도 원본에는 반영되지 않는다. internal class Program { static void Main(string[] args) { int x = 5; Add(x, 3); System.Console.WriteLine($"x={x}"); } static void Add(int x..
[C#/기본기] 참조 타입을 매개변수에 전달할 때는 Pass by reference일까?c#을 사용하다 보면, 메서드에 참조 형식(class, interface, delegate 등...)을 매개변수에 전달해야 할 일이 빈번하게 발생한다. 값 형식: Pass by value int, byte, 구조체 등의 값 형식 변수를 매개변수에 전달할 때는 Pass by value로 동작하는 것은 웬만하면 모두 인지하고 있을 것이다. 즉 메서드에 변수를 전달할 때 값 복사가 일어나게 되며, 메서드 내에서 변수의 값을 수정하더라도 원본에는 반영되지 않는다. internal class Program { static void Main(string[] args) { int x = 5; Add(x, 3); System.Console.WriteLine($"x={x}"); } static void Add(int x..
2023.07.13 -
닷넷 7 기준 Span과 ReadOnlySpan에는 아직 Split이 없다. 닷넷 6에서 Span과 Memory에 온갖 기능이 추가되었고 그 외 내부 API도 차근차근 Span과 ReadOnlySpan으로 바뀌어가는 와중에, 꽤 자주 쓸 법한 Split이 추가되지 않은 것은 꽤나 의외이다. 만약 Split을 하는 목적이 Parse나 문자열 확인 등이라면 string.Split을 쓰는 것보다는 ReadOnlySpan을 이용하는 것이 불필요한 힙 할당을 줄이는 것에 도움이 될 수 있다. 사실 Span와 ReadOnlySpan에는 이미 특정 값과 일치하는 첫 번째 인덱스를 반환하는 IndexOf라는 확장 메서드가 구현되어 있어서, 마음먹고 구현하고자 한다면 간단한 수준의 Split 구현은 그리 어려운 일이 아..
ReadOnlySpan<char> Split하기닷넷 7 기준 Span과 ReadOnlySpan에는 아직 Split이 없다. 닷넷 6에서 Span과 Memory에 온갖 기능이 추가되었고 그 외 내부 API도 차근차근 Span과 ReadOnlySpan으로 바뀌어가는 와중에, 꽤 자주 쓸 법한 Split이 추가되지 않은 것은 꽤나 의외이다. 만약 Split을 하는 목적이 Parse나 문자열 확인 등이라면 string.Split을 쓰는 것보다는 ReadOnlySpan을 이용하는 것이 불필요한 힙 할당을 줄이는 것에 도움이 될 수 있다. 사실 Span와 ReadOnlySpan에는 이미 특정 값과 일치하는 첫 번째 인덱스를 반환하는 IndexOf라는 확장 메서드가 구현되어 있어서, 마음먹고 구현하고자 한다면 간단한 수준의 Split 구현은 그리 어려운 일이 아..
2023.01.15 -
일반적으로 csv 파일은 쉼표를 기준으로 split하면 간단하게 파싱할 수 있지만, 셀 내부 데이터에 쉼표가 포함되어 있을 때(특히 JSON string인 경우 등) 별다른 예외 처리없이 split하면 셀 안에 있는 데이터까지 잘라버리는 등 원하지 않는 동작을 할 수 있다. 이럴 때는 csv 파싱 라이브러리를 쓴다든지 정규표현식을 통해 셀 내부에 있는 쉼표는 무시하고 파싱하는 과정이 필요하다. 다행히 csv로 저장되는 JSON string은 따옴표로 쉽게 구분되므로, 별다른 라이브러리를 사용할 필요 없이 구현이 간단한 편이다. string[] csv = File.ReadAllLines(@".\csv1.csv"); Regex regex = new(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$..
[C#] Csv 셀 내부의 JSON string을 고려하는 정규표현식일반적으로 csv 파일은 쉼표를 기준으로 split하면 간단하게 파싱할 수 있지만, 셀 내부 데이터에 쉼표가 포함되어 있을 때(특히 JSON string인 경우 등) 별다른 예외 처리없이 split하면 셀 안에 있는 데이터까지 잘라버리는 등 원하지 않는 동작을 할 수 있다. 이럴 때는 csv 파싱 라이브러리를 쓴다든지 정규표현식을 통해 셀 내부에 있는 쉼표는 무시하고 파싱하는 과정이 필요하다. 다행히 csv로 저장되는 JSON string은 따옴표로 쉽게 구분되므로, 별다른 라이브러리를 사용할 필요 없이 구현이 간단한 편이다. string[] csv = File.ReadAllLines(@".\csv1.csv"); Regex regex = new(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$..
2023.01.15 -
internal static class SpanExtension { public static T[] Concat(this ReadOnlySpan span1, ReadOnlySpan span2) { T[] ret = new T[span1.Length + span2.Length]; Span span = new(ret); span1.CopyTo(span); span2.CopyTo(span[span1.Length..]); return ret; } } // Program.cs ReadOnlySpan source1 = "Hello, "u8; ReadOnlySpan source2 = "World!"u8; Console.WriteLine(System.Text.Encoding.UTF8.GetString(source1.C..
[C#] Span<T>을 이용한 배열 이어붙이기internal static class SpanExtension { public static T[] Concat(this ReadOnlySpan span1, ReadOnlySpan span2) { T[] ret = new T[span1.Length + span2.Length]; Span span = new(ret); span1.CopyTo(span); span2.CopyTo(span[span1.Length..]); return ret; } } // Program.cs ReadOnlySpan source1 = "Hello, "u8; ReadOnlySpan source2 = "World!"u8; Console.WriteLine(System.Text.Encoding.UTF8.GetString(source1.C..
2023.01.13