如何使用.net core中的反射按名称查找类的命名空间?

时间:2016-07-11 13:51:59

标签: c# reflection asp.net-core

我有一个只有类名的字符串列表。我需要使用Activator创建它们的实例,但所有这些实例都可以在不同的命名空间中。将来可以将类移动到另一个命名空间中,因此我无法对其进行硬编码。

2 个答案:

答案 0 :(得分:4)

如果您知道您将永远不会有多个具有相同名称的类型驻留在不同的名称空间中,您可以迭代程序集中的所有类型并过滤类型名称。例如,这有效:

var typenames = new[] { "String", "Object", "Int32" };

var types =  typeof(object).GetTypeInfo().Assembly
    .GetTypes()
    .Where(type => typenames.Contains(type.Name))
    .ToArray(); // A Type[] containing System.String, System.Object and System.Int32

如果您有多个具有相同名称的类型,则不一定会中断,但您将在列表中获得所有类型。

答案 1 :(得分:1)

您可以获取程序集的所有类型,并找到具有相关名称的程序集。

var type = assembly.GetTypes().FirstOrDefault(x => x.Name == name);

注意:名称可能不是唯一的。在这种情况下,您没有机会找到正确的类型,除非您可以对命名空间8e.g进行一些猜测。可能的命名空间列表,命名空间的“黑名单”等。)