Предотвратить CodeDom от расщепления больших строк - PullRequest
3 голосов
/ 25 февраля 2011

Я использую CodeDom для генерации кода на C #, и частично это связано с выпуском содержимого строковых переменных.Иногда эти строки могут быть довольно длинными.

Есть ли способ предотвратить разбиение кода больших строк CodeDom на большие куски?Что делает генератор, так это то, что он разбивает длинные строки на несколько меньших и вставляет между ними оператор конкатенации.Хотя код компилируется нормально, мне не нравится, как он портит читабельность моего кода.

Ответы [ 2 ]

4 голосов
/ 25 февраля 2011

Хм .. Я так не думаю.Тыкав с помощью .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);
}

И есликопай дальше, обе функции не настраиваются.

2 голосов
/ 28 февраля 2011

Я думаю, что нашел способ обойти это: Короче говоря, вместо использования CodePrimitiveExpression для вывода моей строки, я смог использовать CodeSnippetExpression, явно указав в нее свой строковый аргумент.

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

Работает в тех немногих случаях, когда мне приходилось его использовать, но, конечно, я не проверял все сценарии.

...