繁体   English   中英

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

[英]How to find namespace of class by its name using reflection in .net core?

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM