C# 从字符串创建类实例
我有一个C#方法,它从一个字符串创建一个类的新实例,但是,我在运行代码时遇到了一个错误C# 从字符串创建类实例,c#,reflection,class,instance,argumentnullexception,C#,Reflection,Class,Instance,Argumentnullexception,我有一个C#方法,它从一个字符串创建一个类的新实例,但是,我在运行代码时遇到了一个错误 obj = (ClassX)Activator.CreateInstance(Type.GetType("classPrefix_" + className)); 未处理此异常 值不能为空 参数名称:类型 对此错误的任何帮助都将不胜感激。它看起来像是您的类型。GetType(“classPrefix”+className)调用将返回一个null。这会在传递到CreateInstance方法时导致Argume
obj = (ClassX)Activator.CreateInstance(Type.GetType("classPrefix_" + className));
未处理此异常
值不能为空
参数名称:类型
对此错误的任何帮助都将不胜感激。它看起来像是您的
类型。GetType(“classPrefix”+className)
调用将返回一个null
。这会在传递到CreateInstance
方法时导致ArgumentNullException
计算“classPrefix”+className
,并检查您是否有一个名为what的类型
在使用该方法时,还应指定(即,完全限定类型名称,包括程序集名称和命名空间) 您可能只是缺少类名中的名称空间您可能没有“classPrefix”类型以及类名上的任何内容。Type.GetType()调用返回null,CreateInstance抛出ArgumentNullException。这是因为
Type.GetType(classHere)
没有找到任何内容,您确定要查找的类名存在吗?请记住,如果可能的话,它应该以名称空间作为前缀,并且在外部程序集中找不到它,除非它已加载到应用程序域中。适用于我:
class ClassX {}
class classPrefix_x : ClassX {}
public class Program
{
public static void Main()
{
string className = "x";
ClassX obj = (ClassX)Activator.CreateInstance(Type.GetType("classPrefix_" + className));
Console.WriteLine(obj);
}
}
结果:
classPrefix_x
不能定义要查找的类。您确定键入的正确吗?您可能需要使用程序集限定名作为Type.GetType的参数
eg AssemblyName.Namespace.ClassName
它看起来像是
类型。GetType(“classPrefix_quot+className)
返回null
如果找不到类型,则返回null。一些可能的原因是缺少命名空间,或者类所在的程序集尚未加载
该方法的Api文档可能会提供更多的信息。
嗯。。。类“classPrefix”是否存在?如果没有,则Type.GetType将返回null…FQTN是Namespace.Class,Assembly,即程序集名称位于末尾,并用逗号分隔(不是在前面,而是用点分隔)。谢谢。我不得不把
Namespace.className
@Tim Cooper-没问题,很高兴能帮助@itowlson-谢谢,我已经更新了我的答案来更正我的术语。