防止 CodeDom 分割大字符串

发布于 2024-10-19 03:11:16 字数 176 浏览 3 评论 0原文

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

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

I am using CodeDom to generate C# code, and part of that involves to spitting out String variable contents. Sometimes, these strings can get to be quite long.

Is there a way to prevent the CodeDom code generator from splitting those large strings into smaller chunks? What the generator does is that it splits the long strings into a few smaller ones, and inserts a concatenation operator in between. While the code compiles fine, I don't like how it messes up the readability of my code.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

假装爱人 2024-10-26 03:11:16

嗯..我不这么认为。使用 .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);
}

如果您进一步挖掘,这两个函数都是不可配置的。

Hmm.. I don't think so. Poking with .NET Reflector into the source code of Microsoft.CSharp.CSharpCodeGenerator (System's internal), we find this:

private void GeneratePrimitiveExpressionBase(CodePrimitiveExpression e)
{
...
    else if (e.Value is string)
    {
        this.Output.Write(this.QuoteSnippetString((string) e.Value));
    }
...
}

and ... this:

private string QuoteSnippetString(string value)
{
    if (((value.Length >= 0x100) && (value.Length <= 0x5dc)) && (value.IndexOf('\0') == -1))
    {
        return this.QuoteSnippetStringVerbatimStyle(value);
    }
    return this.QuoteSnippetStringCStyle(value);
}

And if you dig further, both functions are not configurable.

分分钟 2024-10-26 03:11:16

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

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

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

I think I have found a way around this: In short, instead of using a CodePrimitiveExpression to output my string, I was able to use a CodeSnippetExpression by explicitly quoting my string argument to it.

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

Works for the few cases where I've had to use it, but of course I haven't tested all scenarios.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文