C#判断代码片段为class还是method
创始人
2024-11-15 02:03:06

判断代码片段是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()             .FirstOrDefault();          if (classDeclaration != null)         {             Console.WriteLine($"Class: {classDeclaration.Identifier.Text}");              // Extract fields (member variables)             var fields = classDeclaration.Members                 .OfType();              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();              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.");         }     } } 

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...