C# 防止CodeDom拆分大字符串

C# 防止CodeDom拆分大字符串,c#,.net,codedom,C#,.net,Codedom,我正在使用CodeDom生成C#代码,其中一部分涉及到吐出字符串变量内容。有时,这些字符串可能会变得相当长 有没有一种方法可以防止CodeDom代码生成器将那些大字符串分割成更小的块?生成器所做的是将长字符串拆分为几个较小的字符串,并在它们之间插入一个串联运算符。虽然代码编译得很好,但我不喜欢它如何破坏代码的可读性。嗯。。我不这么认为。通过.NET Reflector查看Microsoft.CSharp.CSharpCodeGenerator(系统内部)的源代码,我们发现: private vo

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


有没有一种方法可以防止CodeDom代码生成器将那些大字符串分割成更小的块?生成器所做的是将长字符串拆分为几个较小的字符串,并在它们之间插入一个串联运算符。虽然代码编译得很好,但我不喜欢它如何破坏代码的可读性。

嗯。。我不这么认为。通过.NET Reflector查看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);
}
私有字符串QuoteSnippetString(字符串值)
{

如果(((value.Length>=0x100)&&(value.Length我想我已经找到了一种解决方法:简而言之,我不使用CodePrimitiveExpression来输出字符串,而是通过显式引用字符串参数来使用CodeSnippetExpression

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

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

那太糟糕了。感谢您向我指出CSharpCodeGenerator内部的适当私有方法,我至少能够确定拆分每80个字符发生一次。实际上,第一次拆分发生在81个字符之后,后续拆分发生在80个字符之后80个字符后cur。虽然这是一种解决方法,但我更喜欢:只需使用带双引号的CodeSnippetExpression,并在必要时替换字符串中的特殊字符(例如。\n、\r、\t、双引号等)。为什么您希望/需要它来生成可读的代码?原因有很多。最常见的用例是当您希望摆脱CodeDom代码生成器时(例如,使用另一种技术(如T4模板)重构它们),您需要它们来生成更易于比较的输出源代码。许多开发人员过度使用CodeDom生成代码,而实际上他们应该使用一种简单、更易于维护、更易于人类阅读的技术来实现相同的结果。