본문 바로가기

컴퓨터/C#

(20)
[C#] 확장 메서드 확장 메서드란, 메서드가 사용될 클래스명을 첫번째 파라미터로 지정하여,마치 해당 클래스가 확장 메서드를 인스턴스 메서드로 갖는 것처럼 보이게하는 것이다. 확장 메서드의 사용 방법은, 첫번째 파라미터의 앞에 this 키워드를 써주면 된다. 1234567891011namespace ExtensionMethods { public static class MyExtensions { public static int WordCount(this String str) { return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length; } } } Colored by Color Scriptercs>> WordCount 라..
[Error] '{0}' 어셈블리의 '{1}' 형식이 serializable로 표시되어 있지 않습니다. 에러 문구 KOR - 오류:'{0}, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' 어셈블리의 '{1}' 형식이 serializable로 표시되어 있지 않습니다. ENG - Error:Type '{1}' in Assembly '{0}, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable. 문제 분석 문제1. 에러 발생 위치가 작성한 (코드 수정 가능한) 코드일 때 해결1), 에러 발생 시점이 디버깅 중이거나, 프로그램이 실행 중일 때 해결1),문제2. 에러 발생 위치가 라이브러리일 때. 해결2), 에러 발생 시점이 빌드 시 일 때, 해결2), 빌드 시 발..
[C#] TypeLoadException 예외 해결 방법 에러가 발생한 코드에 문법적, 논리적 문제가 없어 보일 경우, 다음 두 가지를 확인한다. 1. 프로젝트 이름 확인프로젝트 이름이 겹칠 경우, 발생할 수 있다고 한다.'프로젝트 속성 > 어셈블리 이름' 을 확인한다. 2. dll 버전 확인예외를 발생시킨 dll 의 버전을 확인한다.ex ) Math.Net 의 경우 MathNet.TypeLoadException 이런 식의 예외를 던졌다.사용하는 dll 의 버전이 다를 경우에 이 에러가 날 수 있다고 한다. 이번에는 2번 방법으로 해결하였는데,한 모듈과 테스트 프로젝트의 Math.net 버전이 각각 달라서 발생하였다. 참고 : How to debug System.TypeLoadException errors in .NET?
[C#] Text 파일 줄 단위 읽기, 쓰기 (System.IO.File) 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748using System.IO; private void LoadIPFile(string fpath){ var AllLines = (string[])null; var numberOfLines = 0; var readLines = 0; var ipList = new List(); if (!File.Exists(fpath)) return; if (Path.GetExtension(fpath) != ".ip") return; numberOfLines = File.ReadLines(fpath).Count(); AllLines = new string[numberOf..
[C#] 객체의 XML 직렬화 (Serialization) 1. 직렬화, XML 저장하기, XML 불러오기1234567891011121314151617181920public void OpenProjectFile(string fpath){ if (File.Exists(fpath)) { try { using (var sr = new StreamReader(fpath)) { var xs = new XmlSerializer(typeof(MyProjectInfo)); var prj = (MyProjectInfo)xs.Deserialize(sr); this.project.Set(prj); } } catch (Exception ex) { Console.WriteLine(ex); MessageBox.Show("프로젝트 파일 로딩 실패 : " + fpath); } }}Color..
[C#] Stream.Read 메서드에 관하여.. Stream.Read Method12345public abstract int Read( byte[] buffer, int offset, int count)cs 매개 변수buffer형식: System.Byte[] 바이트 배열입니다. 이 메서드가 반환될 때 버퍼에는 지정된 바이트 배열의 값이 offset 및 (offset + count - 1) 사이에서 현재 소스로부터 읽어온 바이트로 교체된 상태로 포함됩니다. offset형식: System.Int32 현재 스트림에서 읽은 데이터를 저장하기 시작하는 buffer의 바이트 오프셋(0부터 시작)입니다. count형식: System.Int32 현재 스트림에서 읽을 최대 바이트 수입니다. 반환 값형식: System.Int32 버퍼로 읽어온 총 바이트 수입니다. 이 ..
[C#] C#에서 C++ DLL 사용하기 - C# Wrapper 만들때 native c 로 구현하는 것이 귀찮아서 아래 방법을 사용함. 구조체 사용에 제약이 있음.. - '이 방법'을 뭐라고 부르는지 아직 모르겠음,.. - 관련어 : Pinvoke, InteropServices - 마샬링 : 한 객체의 메모리에서의 표현방식을 저장 또는 전송에 적합한 다른 데이터 형식으로 변환하는 과정, 참고 - P/Invoke : .NET Framework는 DLL 안에 패키지된 관리되지 않는 함수를 관리되는 응용 프로그램에서 호출할 수 있도록 Dllimport 특성과 함께 명시적 플랫폼 호출(PInvoke) 기능을 제공합니다. 예를 들어 Win32 함수를 호출하려면 PInvoke가 필요합니다. 자세한 내용은 C++ Interop 사용(암시적 PInvoke)을..
[C#] string to DateTime (Try)ParseExact의 두번째 인자인 format을 잘못 넣어서 에러string 인자에 들어올 예상되는 형식을 넣어줘야한다.변환되기 원하는 포맷을 넣는게 아님. 123456789101112131415// 입력 날짜 : Shape 데이터에서 가져오는 건데 포맷이 "yyyy/MM/dd" 형태로 되어있음.DateTime inputDate = feature.GetFieldAsString("RegDate");// 저장 날짜DateTime outDate = new DateTime(); string sDate = ""; #if Test // 1. 그냥 변환 outDate = Convert.ToDateTime();#else // 2. 예외 발생 처리 outDate = DateTime.ParseExact(inpu..