有没有办法通过C#代码获取您在类中使用的所有命名空间?

Con*_*ark 12 c# reflection namespaces

有没有办法得到一个List<string>包含命名空间/类中所有'使用'的东西?

例如

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
using System.Linq.Dynamic;
using System.Text.RegularExpressions;
using System.Reflection;
namespace MyNamespace.Other.Scripting
{
Run Code Online (Sandbox Code Playgroud)

我会有一个带有"System","System.Text","System.Reflection"等的List.

编辑:如下所示,我正在使用这个http://kamimucode.com/Home.aspx/C-sharp-Eval/1 - C#评估器,我必须为TypeParser提供一个命名空间列表.问题是,我不会总是知道要放哪些.我正在使用C#中的一种简单的脚本语言,从中我将能够调用C#代码.我的另一种选择是在脚本语言中创建一个关键字,例如"using",但我真的不想这样做.我希望能够选择一个C#对象,通过我的script.txt做任何我想做的事情,并且可以自由地使用它引用的命名空间.

我想在我的Xna Game引擎中使用它,能够编写可以执行C#的自定义脚本以及我的简单脚本函数.

Mar*_*mić 5

这将适用于声明类的方法中的所有类型,但它不会为编译之前的文件中的所有类提供所有名称空间.这是不可能的,因为在编译之后,框架无法知道文件中的位置.

因此,如果你有一个CLASS每个文件,这将工作:如果你遗漏了一些东西(我寻找字段和方法,也许没有考虑到某些事情,如果只是添加)

List<string> namespaces = new List<string>();

        var m = MethodInfo.GetCurrentMethod();

            foreach (var mb in m.DeclaringType.GetMembers(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic))
            {
                if (mb.MemberType == MemberTypes.Method && ((MethodBase)mb).GetMethodBody() != null)
                {

                    foreach (var p in ((MethodInfo)mb).GetMethodBody().LocalVariables)
                    {
                        if (!namespaces.Contains(p.LocalType.Namespace))
                        {
                            namespaces.Add(p.LocalType.Namespace);
                            Console.WriteLine(p.LocalType.Namespace);
                        }
                    }
                }
                else if (mb.MemberType == MemberTypes.Field) {
                    string ns = ((System.Reflection.FieldInfo)mb).FieldType.Namespace;
                    if (!namespaces.Contains(ns))
                    {                        
                        namespaces.Add(ns);
                        Console.WriteLine(ns);
                    }
                }
            }
Run Code Online (Sandbox Code Playgroud)

我案例的示例输出:

System
System.Collections.Generic
System.Reflection
WindowsFormsApplication2
System.Linq.Expressions
Run Code Online (Sandbox Code Playgroud)