You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#代码中独立if与if-else语句的确定性解析及计数实现

解析C#代码区分独立if与if-else语句的实现方案

别用字符串匹配或者手动找大括号的方式了,这种方法根本扛不住C#语法的各种变体(无大括号、嵌套、换行空格差异)。直接用微软官方的Roslyn语法分析器,能精准处理所有合法的C#语法结构。

实现步骤

  • 先安装Roslyn的C#分析包:在NuGet里搜Microsoft.CodeAnalysis.CSharp并安装。
  • 读取.cs文件内容,生成语法树:Roslyn会把代码解析成结构化的语法节点,不用自己处理嵌套、大括号这些细节。
  • 遍历所有IfStatementSyntax节点:每个if语句都会被解析成这个类型的节点,不管是顶层还是嵌套的。
  • 判断是否带else:每个IfStatementSyntax对象有个Else属性,只要这个属性不为null,就说明是if-else结构;反之就是独立if。
  • 获取行号:通过节点的Location属性拿到行信息,注意Roslyn的行号从0开始,要加1才是我们平时看到的行号。

完整代码示例

using System.Collections.Generic;
using System.IO;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;

public class IfStatementAnalyzer
{
    public static (List<int> standaloneIfLines, List<int> ifElseLines) AnalyzeCsFile(string filePath)
    {
        var standaloneIfLines = new List<int>();
        var ifElseLines = new List<int>();

        // 读取文件内容
        string code = File.ReadAllText(filePath);
        // 生成语法树
        SyntaxTree tree = CSharpSyntaxTree.ParseText(code);
        // 获取根节点
        CompilationUnitSyntax root = tree.GetCompilationUnitRoot();

        // 遍历所有IfStatementSyntax节点
        foreach (var ifStatement in root.DescendantNodes().OfType<IfStatementSyntax>())
        {
            // 获取行号(Roslyn行号从0开始,加1转为实际行号)
            int lineNumber = ifStatement.GetLocation().GetLineSpan().StartLinePosition.Line + 1;

            if (ifStatement.Else == null)
            {
                standaloneIfLines.Add(lineNumber);
            }
            else
            {
                ifElseLines.Add(lineNumber);
            }
        }

        return (standaloneIfLines, ifElseLines);
    }
}

为什么这个方案靠谱

  • 自动处理嵌套if:不管if嵌套多少层,Roslyn都会把每个if作为独立的IfStatementSyntax节点,不会混淆外层和内层的else关联。
  • 支持无大括号的if:比如if (x > 0) Console.WriteLine("Hi"); else Console.WriteLine("Bye");这种写法,Roslyn能正确识别这是if-else结构。
  • 忽略语法无关的空格、换行:不管if(还是if (,或者else和if的大括号在不在同一行,都能准确判断。

内容的提问来源于stack exchange,提问作者adouthat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 14:02:09