C#判断代码片段为class还是method

发布于:2024-08-08 ⋅ 阅读:(87) ⋅ 点赞:(0)

判断代码片段是class还是method:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            string codeSnippet1 = @"public class MyClass
            {
                bool b=false;
                 public    void   MyMethod()
                {
                    int i=0;
                    // Method logic
                }
            }";

            string codeSnippet2 = @"public void MyMethod()
            {
                // Method logic
            }

            public void MyMethod1()
            {
                // Method logic
            }
";

            Console.WriteLine(IsClassOrFunction(codeSnippet1)); // Output: Class
            Console.WriteLine(IsClassOrFunction(codeSnippet2)); // Output: Function
        }

        static string IsClassOrFunction(string codeSnippet)
        {
            // Regular expression to match a class definition
            var classRegex = new Regex(@"^\s*public\s+class\s+\w+", RegexOptions.Multiline);

            // Regular expression to match a method definition
            var methodRegex = new Regex(@"^\s*(public|private|protected|internal)?\s*(static\s+)?\w+\s+\w+\s*\(.*\)\s*\{", RegexOptions.Multiline);

            if (classRegex.IsMatch(codeSnippet))
            {
                return "Class";
            }
            else if (methodRegex.IsMatch(codeSnippet))
            {
                return "Function";
            }
            else
            {
                return "Unknown";
            }
        }
    }

抽取class代码中的成员变量和成员方法:

using System;
using System.Linq;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;

class Program
{
    static void Main()
    {
        string codeSnippet = @"
        public class MyClass
        {
            public int MyField;
            private string _myPrivateField;

            public void MyMethod()
            {
                // Method logic
            }

            private void MyPrivateMethod()
            {
                // Method logic
            }
        }";

        AnalyzeClass(codeSnippet);
    }

    static void AnalyzeClass(string codeSnippet)
    {
        // Parse the code snippet
        var tree = CSharpSyntaxTree.ParseText(codeSnippet);
        var root = tree.GetRoot();

        // Find the class declaration
        var classDeclaration = root.DescendantNodes()
            .OfType<ClassDeclarationSyntax>()
            .FirstOrDefault();

        if (classDeclaration != null)
        {
            Console.WriteLine($"Class: {classDeclaration.Identifier.Text}");

            // Extract fields (member variables)
            var fields = classDeclaration.Members
                .OfType<FieldDeclarationSyntax>();

            Console.WriteLine("Fields:");
            foreach (var field in fields)
            {
                var fieldType = field.Declaration.Type.ToString();
                foreach (var variable in field.Declaration.Variables)
                {
                    Console.WriteLine($"  {fieldType} {variable.Identifier.Text}");
                }
            }

            // Extract methods
            var methods = classDeclaration.Members
                .OfType<MethodDeclarationSyntax>();

            Console.WriteLine("Methods:");
            foreach (var method in methods)
            {
                var returnType = method.ReturnType.ToString();
                Console.WriteLine($"  {returnType} {method.Identifier.Text}");
            }
        }
        else
        {
            Console.WriteLine("No class declaration found.");
        }
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到