C# 如何使用.NETCore中的反射按名称查找类的命名空间?
我有一个只有类名的字符串列表。我需要使用Activator创建它们的实例,但它们都可以位于不同的名称空间中。类将来可以移动到另一个命名空间中,所以我不能硬编码它 如果您知道在不同的名称空间中永远不会有多个具有相同名称的类型,那么您可以迭代程序集中的所有类型,并对类型名称进行筛选。例如,这项工作:C# 如何使用.NETCore中的反射按名称查找类的命名空间?,c#,reflection,asp.net-core,C#,Reflection,Asp.net Core,我有一个只有类名的字符串列表。我需要使用Activator创建它们的实例,但它们都可以位于不同的名称空间中。类将来可以移动到另一个命名空间中,所以我不能硬编码它 如果您知道在不同的名称空间中永远不会有多个具有相同名称的类型,那么您可以迭代程序集中的所有类型,并对类型名称进行筛选。例如,这项工作: var typenames = new[] { "String", "Object", "Int32" }; var types = typeof(object).GetTypeInfo().Ass
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。可能的名称空间列表、“名称空间黑名单”等)您是否锁定了
string
列表,或者是否可以改为Type
列表?如果您只有string
s,您希望如何处理具有多个相同名称的类型(在不同名称空间中)的情况?很遗憾,我被锁定了。类列表来自文本文件,我需要创建适当的对象。请确保也签出此线程:它不适用于.Net CoreAssembly没有GetAssembly的定义。
它可以工作,但您可能必须向project.json中添加框架程序集依赖项。给我几分钟的时间,我看看是否能找出哪一个。@MKasprzyk与net core一起使用typeof(object).GetTypeInfo().Assembly
获得Assembly。