我有一个.cs文件,里面填充了所有类中的类和方法。如何创建所述C#文件中所有方法的名称列表?
例如,说我有: public class Trim
{
public static string TrimEndCustom(string inputString, string charsToTrim)
{
//method code here
}
public static string TrimStartCustom(string inputString, string charsToTrim)
{
//Method Code here
}
}
//Next class with more methods
我最初的想法是循环遍历所有类,然后遍历方法并添加名称,但我不熟悉C#的语法。我也许会以错误的方式看待这个问题。
基本上我的目标是拥有一个包含我的.cs文件中所有方法名称的字符串列表
答案 0 :(得分:1)
什么是收集这些名字?这是在运行时的程序内吗?如果是这样,你可以使用反射:
List<string> names = new List<string>();
Type t = typeof(Trim);
var methods = t.GetMethods(BindingFlags.Static | BindingFlags.Public);
foreach (var method in methods)
{
string name = method.Name;
names.Add(name);
}
名称将包含所有公共静态方法名称;您可以更改绑定标志以调整是否也需要实例名称。请注意,某些语法可能有些偏差,但核心就在那里。
答案 1 :(得分:1)
您可以使用轻松完成此操作,而无需使用反射。下面是一个示例方法,它有一个参数 - C#源文件的位置 - 并返回该源文件中找到的所有方法名称的IEnumerable<string>
:
public static IEnumerable<string> GetMethodNames(string fileName)
{
var tree = Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree.ParseText(File.ReadAllText(fileName));
var methods = tree.GetRoot().DescendantNodes().OfType<MethodDeclarationSyntax>().ToList();
foreach (var method in methods)
{
yield return method.Identifier.Value.ToString();
}
}
这很方便,因为您甚至不必编译原始的* .cs文件才能使其正常工作。基于您尝试构建单独的程序来生成此方法名称列表的事实,希望这对您来说很有用。
注意:您需要安装Roslyn及其所有依赖项才能实现此功能。 Roslyn 非常功能强大 - 一旦你拥有了语法树,你基本上可以访问C#编译器本身所拥有的文件中的任何内容。