2014-06-09 2 views
2

멤버 이름 및 유형 목록이있는 주어진 입력 파일을 기반으로 C#에서 구조체를 동적으로 정의하려고합니다. 질문을 위해, 파일은 다음과 레이아웃이 가정C에서 동적으로 구조체를 정의하십시오.


[Struct Name 1] 
parameter1, type1, typical_value1 
parameter2, type2 
parameter3, type1 

[Struct Name 2] 
    ... etc 

내가 지금 몇 시간 동안 this post을 읽고있다가, 아직 C#으로 그것을 구현하지 않은 - 내 질문은이 될 수 끝난? 또한 unsafe을 사용하지 않고도이 작업을 수행 할 수 있습니까?

원래 구조체를 사용하고 싶었던 이유는 I/O를 통해받은 byte[]을 직렬화하기 위해 사용하고 있기 때문에 확장 메서드가 정적으로 정의 된 구조체에 대해 완벽하게 작동하기 때문입니다. 그러나 나는 그것을 쉽게하기 위해 래퍼 클래스를 위해 다시 작성하는 것에 열어 둘 것입니다.

아이디어는 사용자가 I/O를 통해 연결되는 것을 기반으로 파싱 소스로 선택할 수있는 여러 파일 중 하나를 가질 수 있다는 것입니다. 즉, 런타임 중에 파일을 변경할 수 있지만 한 번에 하나의 파일 만 선택할 수 있습니다.

+0

링크 된 게시물은 C로되어 있으므로 C# –

+1

에서 해당 코드를 복제하려고합니다. - http://stackoverflow.com/questions/4991990/generating-a-struct-at-run-time- 문자 기반의 데이터 유형 정의 문자열 –

+0

런타임 중에 입력 파일이 변경됩니까? – qxg

답변

4

예, 기술적으로는 가능하지만 매우 유용하지는 않습니다. 런타임에 형식을 생성하려면 TypeBuilder을 사용해야하지만 (꽤 복잡함) 다음 문제는 런타임에만 알려진 유형과 이야기하는 것이 매우 어렵다는 것입니다. 보통 이것은 object 또는 공용 영역을 통해 행해졌습니다 - 그러나 이들 모두는 복싱을 요구할 것입니다 struct, 첫번째로 struct 인 것이 아주 유용하지 않는 만드는. 그에게 유일한 해결 방법은 T를 통해 제네릭 (다음 복싱을 방지하기 위해 "제약"모델을 사용할 수있는) - 당신은 같은 방법이 필요합니다 : 당신이로 전환하는

Foo<T>(T data); 

또는

Foo<T>(T[] data); 

methodInfo.MakeGenericMethod(...).Invoke(...)을 통해

+0

감사합니다.'TypeBuilder'를 사용하여 살펴 봅니다. 필요한 부분을 처리 할 것 같습니다. –

관련 문제