c# 배열은 레퍼런스 타입이다
배열은 레퍼런스 타입이라서 매개변수로 넘길 때 ref 키워드를 쓰지 않아도 된다. 그러나 이것은 배열을 초기화한 뒤에만 가능하다. 아래의 예제에서는 클래스만 초기화되고 필드인 배열은 초기화되지 않은 상태라서 널로 넘어가며 레퍼런스로서의 기능을 하지 못한다. 즉 주소가 없는 상태이다. 따라서 ref를 붙여 줘야 한다.
c++ char*를 c# string으로 변환하기
c++의 char*는 캐릭터 포인터 즉 문자열의 주소다. c#에서는 IntPtr로 받는다. 이걸 다시 문자열로 바꾸려면 아래와 같이 한다. PtrToStringAuto나 PtrToStringUni 아닌 PtrToStringAnsi를 이용하는 것에 유의한다. 복사하는 대상이 언매니지드 안시일 때에는 이걸 쓴다. 메떠드의 이름만 봐서는 복사하는 대상이 아니라 복사된 결과 즉 복사하여 안시 문자열로 만든다는 뜻 같지만 아니다.
c# DataTable에서 행 찾기 – DataRowCollection.Find
칼럼 또는 칼럼들을 PrimaryKey로 설정해야 한다.
c# 멱집합 구하는 예제 – linq
어떠한 집합의 원소들로 구성한 집합을 멱집합이라고 한다. 한자로는 羃集合이라고 쓰는데 羃은 ‘덮다’, ‘곱한다’는 뜻이다. 같은 수들을 한 번 곱하면 제곱이라 하고 세 번 이상 곱하면 거듭제곱이라 하며 거듭제곱한 수를 멱수라 한다. 영어로는 power set라 하는데 2^3에서 2를 base라 하고 3을 power라 한다. 이 집합은 왜 이렇게 어려운 이름을 갖게 되었을까? 그 개수가 2를 기본 집합의…
c# control.enabled를 false로 한 때 주의할 점
비주얼 컨트롤의 enabled를 false로 하면 이건 없는 거로 처리된다. 예를 들어 두 개의 버튼들을 겹쳐 놓고 앞의 것을 enabled = false로 해 보자. 앞의 버튼을 클릭하면 이게 enabled 되어 있지 않으므로 아무 반응도 없어야 할 거 같지만 뒤에 가려져 있는 버튼의 클릭 이벤트가 실행된다. 앞의 컨트롤을 뚫고 뒤의 컨트롤을 클릭한 거로 작동한다.
c# 리스트와 배열에서 없는 아이템 찾기 – Enumerable.Except
ints1.Except(ints2)는 ints1에는 있지만 ints2에는 없는 아이템(들)을 반환한다. 배열에도 쓸 수 있다.
c# ToolStripMenuItem.Click으로 ContextMenuStrip의 SourceControl 확인하기
ContextMenuStrip은 .네트의 팝-업 메뉴이다. 쉽게 와닿는 이름이 아니라서 헤매기 십상이다. 레퍼런스에는 shortcut menu라고 되어 있다. 낯설긴 마찬가지다. 예전에 ContextMenu로 쓰이던 게 이거로 바뀌었다. 이걸 만든 뒤 DataGridView.ContextMenuStrip처럼 이게 작동할 대상의 프라퍼티로 설정하면 된다. 작동해야 할 대상이 여럿일 때에는 ToolStripMenuItem.Click가 어디에서 작동해야 하는지 특정해야 한다. 예를 들어 하나의 ContextMenuStrip을 만들어 여러 DataGridView에 연결한 경우 이 이벤트의…