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

我有一个C#方法,它从一个字符串创建一个类的新实例,但是,我在运行代码时遇到了一个错误

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-谢谢,我已经更新了我的答案来更正我的术语。