2011-02-25 3 views
1

CodeDom을 사용하여 C# 코드를 생성하고 있으며 그 중 일부는 String 변수 내용을 뱉어내는 것과 관련이 있습니다. 때로는 이러한 문자열이 꽤 길어질 수 있습니다.CodeDom이 큰 문자열을 분리하지 못하도록

CodeDom 코드 생성기가 큰 문자열을 작은 청크로 나누지 못하도록하는 방법이 있습니까? 생성기는 긴 문자열을 몇 개의 작은 문자열로 분할하고 그 사이에 연결 연산자를 삽입합니다. 코드가 잘 컴파일되지만 코드의 가독성이 얼마나 엉망인지는 싫어합니다.

+1

왜 읽을 수있는 코드를 생성하고 싶습니까? –

답변

3

음 .. 나는 그렇게 생각하지 않습니다. Microsoft.CSharp.CSharpCodeGenerator의 소스 코드에 .NET 리플렉터로 파고 (시스템의 내부는) 우리가 찾을 :

private void GeneratePrimitiveExpressionBase(CodePrimitiveExpression e) 
{ 
... 
    else if (e.Value is string) 
    { 
     this.Output.Write(this.QuoteSnippetString((string) e.Value)); 
    } 
... 
} 

을하고 ...이 :

private string QuoteSnippetString(string value) 
{ 
    if (((value.Length >= 0x100) && (value.Length <= 0x5dc)) && (value.IndexOf('\0') == -1)) 
    { 
     return this.QuoteSnippetStringVerbatimStyle(value); 
    } 
    return this.QuoteSnippetStringCStyle(value); 
} 

그리고 당신은 더 파고 경우, 두 기능은 구성 할 수 없습니다.

+0

너무 나빠요. CSharpCodeGenerator 내부의 적절한 private 메소드를 가르쳐 주셔서 감사합니다. 분할이 80 자마다 발생한다는 것을 최소한으로 결정할 수있었습니다. – Satyajit

0

나는 이것을 해결할 방법을 찾았습니다. 즉, 내 문자열을 출력하기 위해 CodePrimitiveExpression을 사용하는 대신 명시 적으로 문자열 인수를 인용하여 CodeSnippetExpression을 사용할 수있었습니다.

내가 사용해야하는 몇 가지 경우에 적합하지만 모든 시나리오를 테스트하지는 않았습니다.

관련 문제