2010-02-19 198 views
4

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

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

ArgumentNullException了未处理

值不能为空

参数名:

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

+0

那么......班级“classPrefix _ ????”存在?如果不是,那么Type.GetType将返回null ... – 2010-02-19 23:56:52

回答

5

您可能需要使用汇编限定名作为参数Type.GetType

eg AssemblyName.Namespace.ClassName 

+1

+1:这是一个很好的猜测,可能是什么问题。 – 2010-02-20 00:00:27

+0

FQTN是Namespace.Class,程序集,即程序集名称最后以逗号分隔(不在前面,以点分隔)。 – itowlson 2010-02-20 00:04:21

+0

谢谢。我只好把'Namespace.className' – 2010-02-20 00:05:45

0

它看起来像你的Type.GetType("classPrefix_" + className)电话正在返回一个null。当传递给CreateInstance方法时,这导致ArgumentNullException

评估"classPrefix_" + className并检查确实有一种类型称为评估对象。

使用Type.GetType方法(即全限定类型名称,包括程序集名称和名称空间)时,还应该指定AssemblyQualifiedName

0

缺少的命名空间你可能没有一种类型的“classPrefix_”加不管你对类名的。 Type.GetType()调用返回null,并且CreateInstance引发ArgumentNullException。

0

这是因为Type.GetType(classHere)没有找到任何东西,你确定你以后的类名存在吗?请记住,如果可能的话,它应该以一个名称空间作为前缀,除非它已经加载到应用程序域中,否则不会在外部程序集中找到它。

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 

您正在寻找不能定义的类。你确定你输入正确吗?

0

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

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

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