2012-07-02 3 views
5

를 생성하는 유형 반환 된 값을 다시 사용하는 방법 :나는이 문제가 새로운 소스 코드

내가 객체 정보에서 새 소스 코드 파일을 생성 할을.

dictParamMapping 문자열 변수 이름 및 유형이 해당 변수의 유형 인 Dictionary<string, Type>입니다 :

나는 이런 일을합니다.

나는 종류를 사용하여 새 코드를 만들 수 :

dictParamMapping[pairProcess.Value].Type.Name (or FullName) 

유형 INT, 문자열 등 데이터 테이블 ... 모든 것이 잘 작동하지만,이 경우는 사전, 목록 또는 같은 어떤 다른 경우

System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Double, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] 

다음과 같은 새로운 소스 코드를 작성하는 것은 올바르지 않습니다. 내가 좋아하는 걸 얻고 싶습니다 Dictionary<int, double>

아무도 도와 줄 수 있습니까?

+2

['GetGenericTypeDefinition'] (http://msdn.microsoft.com/en-us/library/system.type.getgenerictypedefinition.aspx) 및 ['GetGenericArguments'] (http : // msdn. microsoft.com/en-us/library/system.type.getgenericarguments.aspx)? –

+0

그래서 원시 타입에 대한 C# 별칭을 얻고 싶습니까? – abatishchev

+0

abatishchev하려면 : 네, thats 아이디어. O. R. Mapper : GetGenericArguments는 나에게 내부 유형의 유형을 반환하지만 Dictionary >을 사용하면 검색을 위해 재귀 함수를 만들어야합니다. – pasapepe

답변

3

System.Type에서 C# 호환 이름을 얻으려는 것으로 보입니다. CSharpCodeProvider 클래스로이 작업을 수행 할 수 있습니다.

var typeReference = new CodeTypeReference(typeof(Dictionary<int, double>)); 

using (var provider = new CSharpCodeProvider()) 
    Console.WriteLine(provider.GetTypeOutput(typeReference)); 

출력이 항상 유효한 형식 이름을 제공하기 위해 보장되지 않는다는

System.Collections.Generic.Dictionary<int, double> 

참고. 특히 컴파일러에서 생성 된 유형 (예 : 클로저)은 일반적으로 C#에서 유효하지 않은 유형 이름을 갖습니다.

+0

Perfect !!! 고마워요;) – pasapepe

2

이것은 .NET에서 소스 코드를 생성하는 이상적인 방법은 아닙니다. 공식적으로 지원되는 방법이 있습니다.

프레임 워크에서 공개하는 API는 CodeDOM입니다. 설명서 및 샘플을 탐색하여 수행 할 수있는 작업에 대한 아이디어를 얻을 수 있습니다. Here's a startup sample, 클래스 생성 방법을 보여줍니다. CodeDOM은 출력 언어로 C# 및 VB.NET을 모두 지원합니다.

+0

고마워, 작동한다;) – pasapepe