繁体   English   中英

如何获取方法中使用的内部变量的名称

[英]How to get the name of internal variables used in a method

如何(可能通过Reflection或Roslyn API)获取类方法中使用的内部变量列表?

例如,在以下代码中:

class C1{
   private int var1;
   public string var2;

   void action1()
    {
       int var3;
       var3=var1*var1;
       var2="Completed";
   }
}

我想将var3,var1和var2作为action1()方法中使用的变量列表(作为名称和类型)。

其次,我需要确定哪个上述变量出现在表达式的左侧; 即,它们的值已在此方法中进行了修改。

我认为答案在于使用Roslyn,但我不知道如何使用。 谢谢!

正如@xanatos所提到的,不可能从编译汇编中获取此信息。 您应该使用Roslyn执行此任务并访问源代码。 这个答案解释了如何检索变量https://stackoverflow.com/a/23543883/2138959 ,这篇文章可以是一个好的开始入门C#语义分析

通过后面的文章,你可以得到以下代码:

using System;
using System.Linq;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;

namespace Roslyn
{
    internal class Program
    {
        private static void Main()
        {
            var tree = CSharpSyntaxTree.ParseText(@"
class C1{
   private int var1;
   public string var2;

   void action1()
    {
       int var3;
       var3=var1*var1;
       var2=""Completed"";
   }
}
");
            var root = (CompilationUnitSyntax) tree.GetRoot();
            var variableDeclarations = root.DescendantNodes().OfType<VariableDeclarationSyntax>();

            Console.WriteLine("Declare variables:");

            foreach (var variableDeclaration in variableDeclarations)
                Console.WriteLine(variableDeclaration.Variables.First().Identifier.Value);

            var variableAssignments = root.DescendantNodes().OfType<AssignmentExpressionSyntax>();

            Console.WriteLine("Assign variables:");

            foreach (var variableAssignment in variableAssignments)
                Console.WriteLine($"Left: {variableAssignment.Left}, Right: {variableAssignment.Right}");
        }
    }
}

产生以下输出:

Declare variables:
var1
var2
var3
Assign variables:
Left: var3, Right: var1*var1
Left: var2, Right: "Completed"

确保安装Microsoft.CodeAnalysis NuGet包。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM