以编程方式使用缩进设置C#代码的格式

以编程方式使用缩进设置C#代码的格式,c#,formatting,C#,Formatting,我正在制作一个C#应用程序,包括一个RichTextBox,用户可以在其中放入一些C#代码,并像VisualStudio那样通过缩进对其进行格式化 private void btnEdit_Click(object sender, EventArgs e) { //rchCode.Text= formattedCode; // Which I haven't got anywhere so far } 我寻找同样的问题,并建议使用名为的工具,但我不想使用其他工具、加载项或类似的工具 还提供

我正在制作一个C#应用程序,包括一个
RichTextBox
,用户可以在其中放入一些C#代码,并像VisualStudio那样通过缩进对其进行格式化

private void btnEdit_Click(object sender, EventArgs e)
{
  //rchCode.Text= formattedCode; // Which I haven't got anywhere so far
}
我寻找同样的问题,并建议使用名为的工具,但我不想使用其他工具、加载项或类似的工具

还提供了CodeDOM方法,我还没有弄明白如何使用它(如果它在任何方面都有帮助的话)


我想通过编写一些实际的代码来实现这一点。我该怎么做呢?

因此我通过以下方式得到了解决方案:

它还不够完美(因为它总是在第一行代码之前添加一行或多行新行)。因此,如果有人能改进它或有更好的方法,我将感谢任何新的建议

private void btnEdit_Click(object sender, EventArgs e)
{
    RichTextBox rchTemp = new RichTextBox();
    foreach (string line in rchCode.Lines)
    {
        rchTemp.AppendText("\r\n" + line.Trim());
    }

    RichTextBox rchTemp2 = new RichTextBox();
    int indentCount = 0;
    bool shouldIndent = false;

    foreach (string line in rchTemp.Lines)
    {
        if (shouldIndent)
            indentCount++;

        if (line.Contains("}"))
            indentCount--;

        if (indentCount == 0)
        {
            rchTemp2.AppendText("\r\n" + line);
            shouldIndent = line.Contains("{");

            continue;
        }

        string blankSpace = string.Empty;
        for (int i = 0; i < indentCount; i++)
        {
            blankSpace += "    ";
        }

        rchTemp2.AppendText("\r\n" + blankSpace + line);
        shouldIndent = line.Contains("{");
    }
    rchCode.Text = rchTemp2.Text;
}
private void btnEdit\u单击(对象发送者,事件参数e)
{
RichTextBox rchTemp=新的RichTextBox();
foreach(rchCode.Lines中的字符串行)
{
rchTemp.AppendText(“\r\n”+line.Trim());
}
RichTextBox rchTemp2=新的RichTextBox();
int indentCount=0;
bool shouldIndent=false;
foreach(临时行中的字符串行)
{
如果(应指示)
indentCount++;
if(第行包含(“}”))
缩进计数--;
如果(indentCount==0)
{
rchTemp2.AppendText(“\r\n”+行);
shouldIndent=line.Contains(“{”);
继续;
}
string blankSpace=string.Empty;
对于(int i=0;i
要正确缩进代码,您需要Microsoft.CodeAnalysis.CSharp nuget软件包和.NET framework 4.6+。示例代码:

public string ArrangeUsingRoslyn(string csCode) {
    var tree = CSharpSyntaxTree.ParseText(csCode);
    var root = tree.GetRoot().NormalizeWhitespace();
    var ret = root.ToFullString();
    return ret;
}
一艘班轮:

csCode = CSharpSyntaxTree.ParseText(csCode).GetRoot().NormalizeWhitespace().ToFullString();

您还可以使用它对cs文件中的方法进行排序、组织使用、创建区域等。

用于下面的代码,它在C文件中工作正常,但在cshtml文件中不工作。是否有其他html文件解决方案