有没有办法从C#代码中提取所有变量名,即一个获取源代码文件并在该源代码中返回变量名数组的函数?
答案 0 :(得分:3)
最近发布了Microsoft Roslyn的预览版本,这应该使这个相对简单,因为变量名称不需要复杂的类型解析;单个代码文件之外不需要上下文。
这是一个示例实现;我没有深入研究它以验证是否所有变量声明都匹配,但包括参数,字段,局部变量和lambda参数。这取决于您定义的变量名称。例如您可能还想包含类型参数名称?
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"
为了完成这项工作,需要包含Roslyn(使用Nuget):
PM> Install-Package Microsoft.CodeAnalysis -Pre