我使用CodeDom生成C#代码,并且其中的一部分涉及到吐出字符串变量内容。有时候,这些字符串会变得很长。防止CodeDom分裂大字符串
有没有办法阻止CodeDom代码生成器将这些大字符串拆分为更小的块?生成器的功能是将长字符串拆分为几个较小的字符串,并在它们之间插入一个连接运算符。虽然代码编译良好,但我不喜欢它如何扰乱我的代码的可读性。
我使用CodeDom生成C#代码,并且其中的一部分涉及到吐出字符串变量内容。有时候,这些字符串会变得很长。防止CodeDom分裂大字符串
有没有办法阻止CodeDom代码生成器将这些大字符串拆分为更小的块?生成器的功能是将长字符串拆分为几个较小的字符串,并在它们之间插入一个连接运算符。虽然代码编译良好,但我不喜欢它如何扰乱我的代码的可读性。
嗯..我不这么认为。与.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);
}
如果进一步挖掘和,这两个功能都是不可配置的。
太糟糕了。感谢您将我指向CSharpCodeGenerator中适当的私有方法,我能够至少确定每80个字符发生一次分割。 – Satyajit 2011-02-25 13:15:32
我想我已经找到了解决这个问题的方法:简而言之,不是使用CodePrimitiveExpression输出我的字符串,而是通过明确地引用我的字符串参数来使用CodeSnippetExpression。
CodeExpression x = new CodeSnippetExpression("\"" + myLongString + "\"");
适用于我不得不使用它的少数案例,但当然我还没有测试过所有场景。
为什么你想/需要它来产生可读的代码? – 2011-02-25 13:28:53