如何在类中提取完整的方法

本文关键字:方法 提取 | 更新日期: 2023-09-27 18:14:48

我试图提取一个完整的方法,这是一个cs文件内。比如. .假设我们有一个这样的类…

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GetMethodNm
{
class MyClass
{
    public int ComplexMethod(int param1, int myCustomValue)
    {
        if (param1 == myCustomValue)
        {
            return 54;
        }
        else
        {
            return 0;
        }
    }
    public string ComplexMethodV(int param1, int myCustomValue)
    {
        if (param1 < myCustomValue)
        {
            return "300";
        }
        else
        {
            return "My custom value to return";
        }
    }
    public bool ComplexMethodX(int param1, int myCustomValue)
    {
        if (param1 == myCustomValue)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}
}

然后我需要提取读取cs文件ComplexMethodV的方法。我该怎么做呢?我试过反射,但我只能得到名字和里面的一些东西。但是我需要文本方法在。

如何在类中提取完整的方法

使用这样的Roslyn任务相对容易。在项目中添加NuGet包Microsoft.CodeAnalysis.CSharp,然后使用以下代码

using System;
using System.IO;
using System.Linq;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
namespace SandboxConsole
{
    class Program
    {
        public static void Main()
        {
            var text = File.ReadAllText("MyClass.cs");
            var tree = CSharpSyntaxTree.ParseText(text);
            var method = tree.GetRoot().DescendantNodes()
                         .OfType<MethodDeclarationSyntax>()
                         .First(x => x.Identifier.Text == "ComplexMethodV");
            Console.WriteLine(method.ToFullString());
            Console.ReadLine();
        }
    }
}

输出文本

        public string ComplexMethodV(int param1, int myCustomValue)
        {
            if (param1 < myCustomValue)
            {
                return "300";
            }
            else
            {
                return "My custom value to return";
            }
        }

关于如何解析整个解决方案的更多高级教程,请参阅Wiki。