防止CodeDom拆分大字符串

时间:2011-02-25 12:56:48

标签: c# .net codedom

我正在使用CodeDom生成C#代码,其中一部分涉及吐出String变量内容。有时,这些字符串可能会很长。

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

2 个答案:

答案 0 :(得分:4)

嗯..我不这么认为。将.NET Reflector与Microsoft.CSharp.CSharpCodeGenerator(System的内部)的源代码相结合,我们发现:

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);
}

如果你进一步挖掘,两个功能都是不可配置的。

答案 1 :(得分:2)

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

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

适用于我必须使用它的少数情况,但我当然没有测试过所有场景。