首页 / C# / c# – 如何获取声明的变量和其他定义
c# – 如何获取声明的变量和其他定义
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何获取声明的变量和其他定义,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1900字,纯文字阅读大概需要3分钟。
内容图文
![c# – 如何获取声明的变量和其他定义](/upload/InfoBanner/zyjiaocheng/816/afcca62be68c44838c3e6eb6c5f68ade.jpg)
我在嵌入式REPL中使用Roslyn脚本API,我不时需要知道在当前会话中定义了哪些变量,以及所有其他定义(类,接口……)以及引用和导入的命名空间.
我在API中找不到任何可以给我那种信息的东西,我知道它在某处.
Dose Scripting API使用一些不寻常的实现,比如每次都更新内存中的程序集?如果是这样,如何访问该程序集.
解决方法:
我不知道是否有特定于Roslyn的API,但看起来您可以使用Reflection获取信息.这是一件苦差事.我在Visual Studio中使用REPL来估计您的情况.
using System.Reflection;
Assembly.GetExecutingAssembly().DefinedTypes
显示循环的每次迭代都有一个类型,另外还有一些用于定义的类.幸运的是,提交类型编号,后面的提交数量更高,即提交#11在提交#5之后.
REPL中定义的变量在Session类型中显示为字段,该字段对应于定义它的循环的执行.查看类型中所有已定义变量的调用如下:
chosenType.GetFields(BindingFlags.Instance | BindingFlags.Public)
Roslyn REPL允许您重新声明变量,从新调用者屏蔽先前声明的变量.现在将“会话”视为所有提交的堆栈(最旧的提交在底部).如果遍历堆栈,则第一次出现的给定字段名称将是REPL中具有该名称的活动变量.检索到的字段信息除了提供名称外还提供类型.
这是一个示例会话(包括输出),显示如何查看会话中声明的所有变量.
> using System.Reflection;
> var a = 1;
> var b = "c";
> var c = from type in Assembly.GetExecutingAssembly().DefinedTypes.Reverse()
from variable in type.GetFields(BindingFlags.Instance | BindingFlags.Public)
select variable;
> foreach (var info in c ) {
if (info.FieldType != typeof(Roslyn.Services.InteractiveHostObject)) {
Console.WriteLine(info);
}
}
System.Collections.Generic.IEnumerable`1[System.Reflection.FieldInfo] c
System.String b
Int32 a
如果同一名称出现两次,则列出的第一个名称是会话中可用的名称.以上内容利用了类型返回恰好最老到最年轻的事实.你可能想要自己排序以确定.
无论出于何种原因(bug可能?)我必须在foreach循环中使用if语句,使用LINQ where子句不会给出预期的结果.
根据您想要查找的内容,还有许多可能有用的反射方法,例如GetMethods和GetEvents.如果你想要一切,那么有一个GetMembers See Type Methods.
我希望有人可以提供一种更简单的方法.
内容总结
以上是互联网集市为您收集整理的c# – 如何获取声明的变量和其他定义全部内容,希望文章能够帮你解决c# – 如何获取声明的变量和其他定义所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。