C#System.Type是名称空间?

时间:2017-02-08 01:17:16

标签: c# reflection

System.Type type = Type.GetType("something");

System.Type没有成员'IsNamespace',那么如何判断该类型是否引用了命名空间?

在编译时不知道类型"something"

2 个答案:

答案 0 :(得分:3)

Type不引用名称空间 - 它们引用类型。类型具有描述它们所在的命名空间的属性。

您可以枚举程序集/ appdomain中的所有类型,并收集/缓存唯一的名称空间。

HashSet<string> allNamespaces = new HashSet<string>(
    AppDomain.CurrentDomain.GetAssemblies()
        .SelectMany(s => s.GetTypes())
        .Select(t => t.Namespace)
    );

bool isNamespace = allNamespaces.Contains("foo");

答案 1 :(得分:3)

它没有成员“IsNamespace”,因为名称空间不能由Type个对象表示。以下行无法编译:

typeof(System.Linq);

假设您有一个Type对象,您知道它不是命名空间。使用类似的字符串,GetType如果只是命名空间就应该抛出。