2012-04-20 7 views
3

나는 text template를 작성하고 다음 코드 줄이 오전 :이 나타나는 불구하고, 그러나,텍스트 템플릿에 익명 형식을 사용할 수 있습니까?

var anonArray = new[] 
    { 
     new {Name = "apple", Diam = 4, Tasty = true}, 
     new {Name = "grape", Diam = 1, Tasty = false} 
    }; 

텍스트 템플릿 :

Tuple<string, int, bool>[] tupleArray = new[] 
    { 
     new Tuple<string, int, bool>("apple", 4, true), 
     new Tuple<string, int, bool>("grape", 1, false) 
    }; 

내가 anonymous types의 배열이 변환하고자을 단일 연속 함수이기 때문에 암시 적으로 형식화 된 로컬 변수를 사용할 수 없습니다.

이 제한을 무시하고 익명 형식을 텍스트 서식 파일 내에서 사용하는 간단한 방법이 있습니까?

+0

Visual Studio 2010에서 anonArray 코드를 템플릿에 직접 붙여 넣은 다음 foreach를 사용하여 배열을 반복하면 모든 것이 잘됩니다. 어떤 버전의 VS를 사용하고 있습니까? – GarethJ

+0

@GarethJ Visual Studio 2010. 그리고 텍스트 템플릿을 사용하고 있습니까? '.tt'? – dlras2

+0

예. 구체적으로 말하면 2010 SP1을 사용하고 있지만 중요하지 않습니다. <# @ 템플릿 디버그 = "FALSE"hostspecific = "FALSE"언어 = "C 번호"#> <# 출력 연장 @ = ". TXT"#> <# VAR anonArray = 새 [] { 새로운 {Name = "포도", Diam = 1, 맛있는 = 거짓}, } { #> <#의 foreach (anonArray의 VAR foo에) {#> 헬로 <# = foo.Name #> 유형 <# = foo.GetType() #> <# } # > – GarethJ

답변

3
Dictionary<string, int> set = 
    { 
     { "apple", 4 }, 
     { "grape", 1 } 
    } 

아마도 대략 간결한 내용 일 수 있습니다.

편집 :

dynamic[] array = new dynamic[] { new { Name = "Apple", Diam = 4 }, ... } 

다음 속성에 액세스 할 수 후기 바인딩을 사용 : 당신이 진정으로 익명 객체를 사용할 수있는 기능을 원하는 경우에, 당신은 항상 빵과 버터 dynamic 배열로 갈 수 있습니다. T4 템플릿에 어쨌든 인텔리 센스가있는 것은 아닙니다.

+0

익명 형식을 사용하는 방법을 찾고 있습니다. 주어진 코드는 더 많은 속성을 가진 내 자신의 코드를 정리하려고하는 방법의 예일뿐입니다. – dlras2

+0

익명 개체가 프로그래밍 방식으로 만들어 졌습니까? 그렇다면 LINQ를 사용하여 요소를 IEnumerable로'Select '할 수 있습니다. – Tejs

+0

여기에서는 모든 특정 기술 도구에 대해 배우는 것이 아니라면 특정 기술 도구를 사용하지 말고 문제를 해결해야합니다. 후자가 사실이라면 익명의 클래스를 사용할 수있는 적절한 장소가 아니기 때문에 더 나은 예제를 찾아야합니다. 이 대답은 근본적인 문제를 해결합니다. – Servy

1

잘 작동합니다. Visual Studio 2010에서 anonArray 코드를 템플릿에 직접 붙여 넣은 다음 foreach를 사용하여 배열을 반복하면 모든 것이 잘됩니다. 코드는 템플릿입니다.


<#@ template debug="false" hostspecific="false" language="C#" #> 
<#@ output extension=".txt" #> 
<# 
    var anonArray = new[] { 
     new {Name = "apple", Diam = 4, Tasty = true}, 
     new {Name = "grape", Diam = 1, Tasty = false}, 
    }; 
#> 
<# foreach (var foo in anonArray) { #> 
Hello <#= foo.Name #> of type <#= foo.GetType() #> 
<# } #> 

T4는 그냥 상투적으로 템플릿을 확장하고 C#으로하는 방법 안에 어떤 작품, 일반적 있도록 CodeDOM을 통해 통해 C# 컴파일러를 실행의 몸에서 작동 T4 템플릿. 우리가 컴파일하는 것을보고 싶다면 템플릿 코드를 런타임 (전처리 된) 템플릿에 붙여 넣으십시오. 그러면 해당 확장이 출력으로 표시됩니다.