2011-02-25 34 views
1

我使用CodeDom生成C#代码,并且其中的一部分涉及到吐出字符串变量内容。有时候,这些字符串会变得很长。防止CodeDom分裂大字符串

有没有办法阻止CodeDom代码生成器将这些大字符串拆分为更小的块?生成器的功能是将长字符串拆分为几个较小的字符串,并在它们之间插入一个连接运算符。虽然代码编译良好,但我不喜欢它如何扰乱我的代码的可读性。

+1

为什么你想/需要它来产生可读的代码? – 2011-02-25 13:28:53

回答

3

嗯..我不这么认为。与.net反射戳成Microsoft.CSharp.CSharpCodeGenerator的源代码(系统内部),我们发现这样的:

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中适当的私有方法,我能够至少确定每80个字符发生一次分割。 – Satyajit 2011-02-25 13:15:32

0

我想我已经找到了解决这个问题的方法:简而言之,不是使用CodePrimitiveExpression输出我的字符串,而是通过明确地引用我的字符串参数来使用CodeSnippetExpression。

CodeExpression x = new CodeSnippetExpression("\"" + myLongString + "\""); 

适用于我不得不使用它的少数案例,但当然我还没有测试过所有场景。