c# - 是否有用于查询 C# 文件的 LINQ 查询提供程序?

标签 c# linq

是否有用于查询 C# 文件的 LINQ 查询提供程序之类的东西?

我有一个 Winforms 应用程序,用于帮助我生成代码以及补充 Visual Studio 对现有代码的编辑功能。我希望能够做的一件事是查询给定的类以查看是否存在方法。或查询类列表,或查询方法签名中具有特定 type 的类,等等。

此外,我希望能够在所述 C# 文件上运行通常的 CRUD,但我意识到这可能超出了这个问题的范围。

已解决!

感谢提出建议的人Roslyn ,特别感谢下面 Konrad Kokosa 提供的代码示例,我能够得到我需要的东西。

您需要做的第一件事是下载 Roslyn DLL(我使用的是 NuGet)。然后查询。这是获取类中所有方法的字母顺序列表的另一个示例:

static List<string> GetMethodList(string filename, string className)
{
    var syntaxTree = SyntaxTree.ParseFile(filename);
    var root = syntaxTree.GetRoot();
    var @class = root.DescendantNodes().OfType<ClassDeclarationSyntax>().FirstOrDefault(md => md.Identifier.ValueText.Equals(className));
   
    return (List<string>) @class.DescendantNodes().OfType<MethodDeclarationSyntax>().ToList().OrderBy(m => m.Identifier.ValueText).Select(m => m.Identifier.ValueText);
}

最佳答案

我发现 Roslyn 非常直观。以下是在指定类 className 中为指定 methodName 解析源文件的示例:

static void GetClassMethod(string filename, string className, string methodName)
{
    var syntaxTree = SyntaxTree.ParseFile(filename);
    var root = syntaxTree.GetRoot();
    var @class = root.DescendantNodes()
                      .OfType<ClassDeclarationSyntax>()
                      .Where(md => md.Identifier.ValueText.Equals(className))
                      .FirstOrDefault();
    var method = @class.DescendantNodes()
                      .OfType<MethodDeclarationSyntax>()
                      .Where(md => md.Identifier.ValueText.Equals(methodName))
                      .FirstOrDefault();
}

从这个示例中,您可以轻松构建查询所有类的文件。

关于c# - 是否有用于查询 C# 文件的 LINQ 查询提供程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21145506/

相关文章:

c# - 在动态列数上连接 2 个数据表

用于嵌入式系统的 C#?

c# - 在 LINQ 语句中的调用中使用 out 变量是否安全?

c# - 使用 LINQ 读取带分隔符的文件

c# 与 SQL(ADO.Net 与其他?)

c# - Linq 获取不同的

c# - 2维数组的linq

c# - Linq2Sql 包含

c# - 如何在C#中动态调整文本框的大小

c# - 可以在没有 Linq 的情况下使用 lambda 吗?