tttmfc 2021-03-29 03:21 采纳率: 0%
浏览 43

如何使用DTE的FileCodeModel取得方法内定义的局部变量?

官网示例参考:https://docs.microsoft.com/zh-cn/previous-versions/ms228763(v=vs.110)?redirectedfrom=MSDN

当元素elt为vsCMElement.vsCMElementFunction时代码如下:

                        CodeFunction cc = (CodeFunction)elt;


然后我用cc.Children也好还是什么的各种试却怎么都取不到该方法下定义的局部变量,请问应该怎么做才行?难道要用StartPoint、EndPoint取每行文本再手动分析吗?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-23 20:45
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在C#中,如果你想要获取方法内部定义的局部变量,你需要使用FieldInfo类来访问字段。以下是一个简单的例子:

    using System;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    
    class Program
    {
        static void Main()
        {
            var codeFunction = (CodeFunction)GetElement(elt: new VsCMElement(vsCMElementType.vsCMElementFunction));
    
            // 获取字段信息
            FieldInfo fieldInfo = codeFunction.GetType().GetField("LocalVariable");
    
            if (fieldInfo != null)
            {
                // 获取字段值
                object value = fieldInfo.GetValue(codeFunction);
    
                Console.WriteLine(value);
            }
        }
    
        private static CodeFunction GetElement(VsCMElement elt)
        {
            switch (elt)
            {
                case VsCMElement vsCMElement:
                    return (CodeFunction)elt;
                default:
                    throw new ArgumentException();
            }
        }
    }
    

    在这个例子中,我们首先创建了一个VsCMElement类型的实例,然后通过GetElement方法将其转换为一个CodeFunction类型。然后,我们使用GetField方法从CodeFunction对象中获取名为"LocalVariable"的字段,并打印出其值。

    注意,这个例子假设你的CodeFunction类有一个名为"LocalVariable"的字段。如果它的名称不同,你可能需要修改GetField方法中的参数。此外,如果你的方法没有定义任何字段,那么这个方法将返回null。

    评论

报告相同问题?