从string创建类实例

时间:2010-02-19 23:51:48

标签: c# reflection class instance argumentnullexception

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

obj = (ClassX)Activator.CreateInstance(Type.GetType("classPrefix_" + className));
  

ArgumentNullException未处理

     

值不能为空

     

参数名称:类型

对此错误的任何帮助都将不胜感激。

7 个答案:

答案 0 :(得分:5)

您可能需要使用程序集限定名作为Type.GetType

的参数
eg AssemblyName.Namespace.ClassName

MSDN Doc on assembly qualified names

答案 1 :(得分:3)

您可能只是缺少类名

中的命名空间

答案 2 :(得分:1)

适合我:

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

不得定义您要查找的课程。你确定你输入的是正确的吗?

答案 3 :(得分:0)

您的Type.GetType("classPrefix_" + className)来电似乎正在返回null。这会导致ArgumentNullException传递给CreateInstance方法。

评估"classPrefix_" + className并检查您确实有一个名为它所评估的类型。

使用AssemblyQualifiedName方法时,也应指定Type.GetType(即包含程序集名称和命名空间的完全限定类型名称)。

答案 4 :(得分:0)

你可能没有类型的“classPrefix_”以及className上的任何内容。 Type.GetType()调用返回null,CreateInstance抛出ArgumentNullException。

答案 5 :(得分:0)

这是因为Type.GetType(classHere)找不到任何内容,您确定您所在的类名是否存在?请记住,如果可能的话,它应该以命名空间为前缀,除非已经在App域中加载,否则将无法在外部程序集中找到它。

答案 6 :(得分:0)

看起来Type.GetType("classPrefix_" + className)返回null。

当找不到类型时返回null。一些可能的原因是缺少命名空间,或者尚未加载该类所在的程序集。

关于该方法的Api文档可能会提供更多内容。 http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx