如何使用 Roslyn 检测 class 是否使用 Linq?

How to detect if a class uses Linq using Roslyn?

使用 Roslyn,我想检测 class 是否使用 Linq.

假设一些代码如下:

//...
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };       
var lowNums = 
    from n in numbers 
    where n < 5 
    select n; 
//...

还假设此代码不包含的文件 using System.Linq;

我希望能够检测到文件中有 linq 语句并(比如)自动添加 using System.Linq。我想检测 Linq 的查询或方法语法。

有没有一种方法可以使用 Roslyn 检测到这一点?我只想知道代码是否使用了 Linq,不想做任何进一步的处理。

给定语法树,您可以简单地搜索 SyntaxKind.QueryExpression 或相关节点类型的节点。

有关详细信息,请在 VS2015 中打开该文件并查看语法可视化工具以查看语法树的确切外观。