加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:29:05 所属栏目:百科 来源:网络整理
导读:是否存在用于查询C#文件的LINQ查询提供程序? 我有一个Winforms应用程序,用于帮助我生成代码以及补充Visual Studio对现有代码的编辑功能.我希望能够做的一件事是查询给定的类以查看方法是否存在.或查询类列表,或查询方法签名中具有特定类型的类等. 此外,我希
是否存在用于查询C#文件的LINQ查询提供程序?

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

此外,我希望能够在所述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);
}

解决方法

我发现罗斯林非常直观.以下是在指定的类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();
}

从这个例子中,您可以轻松地使用文件构建查询所有类.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读