当前位置: 首页 > 编程语言 > C#

有没有办法从C#代码中获取您在类中使用的所有名称空间?分享

时间:2023-04-11 12:08:01 C#

有没有办法通过C#代码获取你在一个类中使用的所有命名空间?有没有办法获得一个包含命名空间/类中所有“使用”的列表?使用System.Collections.Generic;使用System.Linq;使用系统文本;使用System.Linq.Expressions;使用System.Linq.Dynamic;使用System.Text.RegularExpressions;使用System.Reflection;命名空间MyNamespace。Other.Scripting{我将有一个包含“System”、“System.Text”、“System.Reflection”等的列表。编辑:如下所述,我正在使用这个http://kamimucode.com/Home.aspx/C-sharp-Eval/1-C#评估器,我必须为TypeParser提供命名空间列表。问题是,我并不总是知道该放哪些。我在C#中使用一种简单的脚本语言,我可以从中调用C#代码。我的另一个选择是在脚本语言中创建一个关键字,如“using”,但我真的不想这样做。我希望能够选择一个C#对象,通过我的script.txt对它做任何我想做的事,并自由使用它引用的命名空间。我想在我的Xna游戏引擎中使用它来编写可以执行C#的自定义脚本以及我的简单脚本函数。这将适用于声明类的方法中的所有类型,但它不会在编译前为文件中的所有类提供所有名称空间。这是不可能的,因为框架无法知道编译后文件中的位置。因此,如果每个文件都有一个CLASS,这将起作用:如果您遗漏了某些内容(我查找了字段和方法,如果只是添加,可能没有考虑到某些内容)Listnamespaces=newList();varm=MethodInfo.GetCurrentMethod();foreach(varmbinm.DeclaringType.GetMembers(BindingFlags.Public|BindingFlags.Instance|BindingFlags.Static|BindingFlags.NonPublic)){如果(mb.MemberType==MemberTypes.Method&&((MethodBase)mb).GetMethodBody()!=null){foreach(varpin((MethodInfo)mb).GetMethodBody().LocalVariables){if(!namespaces.Contains(p.LocalType.Namespace)){namespaces.Add(p.LocalType.Namespace);Console.WriteLine(p.LocalType.Namespace);}}}elseif(mb.MemberType==MemberTypes.Field){stringns=((System.Reflection.FieldInfo)mb).FieldType。命名空间;如果(!namespaces.Contains(ns)){namespaces.Add(ns);控制台.WriteLine(ns);我的案例输出示例:SystemSystem.Collections.GenericSystem.ReflectionWindowsFormsApplication2System.Linq。表达式这是一个粗略的未经测试的尝试,可以帮助您入门:IEnumerableGetNamespacesUsed(stringfileName){varlines=System.IO.File.ReadAllLines(文件名);varusingLines=lines.Where(x=>x.StartsWith("using")&&!x.StartsWith("using("));foreach(varlineinusingLines){if(line.Contains("="))yieldreturnline.Substring(line.IndexOf("="),line.Length-1);elseyieldreturnline.Substring(line.Length-1);}}line.Length-1可能不正确,截断最后的分号你需要测试它以找出它应该是什么。此外,这假设你的代码以相当标准的方式格式化。如果不是,它不会工作。你可以使用MonoCecil来阅读一个类从程序集中定义并获取每个方法中所有引用类型的列表。从那里,您可以提取命名空间列表(完全限定类型名称减去最后一部分)。以上是C#学习教程:有没有办法获得allthenamespacesyouuseintheclassthroughC#code?所有内容分享,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——本文来自网络合集,是否不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: