创建方法和类列表C#

时间:2015-08-06 16:01:49

标签: c# list loops

我有一个.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文件中所有方法名称的字符串列表

2 个答案:

答案 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)

您可以使用Possible permutations of 1 and 0 with n=8轻松完成此操作,而无需使用反射。下面是一个示例方法,它有一个参数 - 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#编译器本身所拥有的文件中的任何内容。