从给定的外部C#源代码中提取所有变量名

从给定的外部C#源代码中提取所有变量名,c#,code-analysis,C#,Code Analysis,有没有办法从C#代码中提取所有变量名,即获取源代码文件并返回该源代码中的变量名数组的函数?最近发布了Microsoft Roslyn的预览版本,该版本应该相对简单,因为变量名不需要复杂的类型解析;在单个代码文件之外不需要上下文 下面是一个示例实现;我没有深入研究它来验证变量声明的所有情况是否都匹配,但是包含了参数、字段、局部变量和lambda参数。这取决于您定义的变量名。e、 g.您可能也想包括类型参数名称 string sourceCode = "class A { " +

有没有办法从C#代码中提取所有变量名,即获取源代码文件并返回该源代码中的变量名数组的函数?

最近发布了Microsoft Roslyn的预览版本,该版本应该相对简单,因为变量名不需要复杂的类型解析;在单个代码文件之外不需要上下文

下面是一个示例实现;我没有深入研究它来验证变量声明的所有情况是否都匹配,但是包含了参数、字段、局部变量和lambda参数。这取决于您定义的变量名。e、 g.您可能也想包括类型参数名称

string sourceCode = "class A { " +
                "int field; " +
                "void B(string parameter) { " +
                "int a, b; int c; " +
                "Action<string> q = (x) => { Console.WriteLine(x); }; " +
                "}";

//or parsefile etc
var syntaxTree = CSharpSyntaxTree.ParseText(sourceCode);

string[] identifierNames = syntaxTree.GetRoot().DescendantNodes()
            .OfType<VariableDeclaratorSyntax>().Select(v => v.Identifier.Text)
            .Concat(syntaxTree.GetRoot().DescendantNodes().OfType<ParameterSyntax>().Select(p => p.Identifier.Text))
            .ToArray();
//identifierNames contains "field", "a", "b", "c", "q", "parameter", "x"

如果您想检查变量名,那么连接现有功能(如R#或VS代码分析,又称FxCop)可能会容易得多。我想列出并保存这些变量名-我需要它用于统计。您的意思是像几年前的这个问题一样吗?使用Roslyn应该很容易。看一看。
PM> Install-Package Microsoft.CodeAnalysis -Pre