有没有人知道在给定类型的 FullName(namespace.classname 格式)但没有 AssemblyQualifiedName 的情况下创建类实例的简单方法?该类型的 FullName 仅包含在一个在运行时被引用和可用的程序集中,因此没有歧义。
我没有类型,我有一个字符串——只有全名,没有装配部分。我不知道程序集,我只知道它被引用,并且只有一个程序集包含类型全名。
谢谢!
编辑:这与从专有协议反序列化实例有关。我收到了很好的答案,但是为了获得最佳解决方案而不是遍历所有程序集,我最终要做的是创建一个静态字典,其中包含 fullName 键和程序集限定名称作为值,因为我知道究竟是哪个类,它们是一个有限的集合。
加载所有程序集并选择它们的类型,然后过滤名称。
public static object CreateType(string typeName)
{
var allTypes = AppDomain.CurrentDomain
.GetAssemblies()
.SelectMany
(
a => a.GetTypes()
);
var type = allTypes.Single( t => t.Name == typeName );
return Activator.CreateInstance(type);
}
您可能会考虑添加一些验证代码来检查重复项,并确保存在默认构造函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句