2012-05-29 104 views
0

我想从名称中保存一个字符串中创建一个类。我已经尝试了一堆东西,但总是得到“值不能为空”从字符串创建类

这里的类

public static readonly MigraDoc.DocumentObjectModel.Color Aquamarine 
Member of MigraDoc.DocumentObjectModel.Colors 

碧海蓝天是MigraDoc.DocumentObjectModel.Colors召开班,是一类颜色

这里就是我想这是接近了我认为应该工作:

Color myColor = (Color)Activator.CreateInstance(Type.GetType("MigraDoc.DocumentObjectModel.Colors+SlateBlue")); 
//+ for nested classes 

的变体:

Color myColor = (Color)Activator.CreateInstance(Type.GetType("MigraDoc.DocumentObjectModel+Colors+SlateBlue")); 

但我总是得到:

Value cannot be null. 
Parameter name: type 

我觉得解决方案应该不是很远...任何想法? :)

+1

我不知道允许'+'在其中的类名。 –

+2

据此,是http://msdn.microsoft.com/en-us/library/w3f99sx1.aspx –

+0

我站好了! –

回答

1

不,Aquamarine不是一个类,它是一个变量。你不能创建一个变量的实例...

1

由于Type.GetType()返回null,您会得到空参数异常。 您为Type.GetType()指定的参数是字段名称,而不是类型名称。类型名称将是"MigraDoc.DocumentObjectModel.Color"

如果您想要该类型的字段名称为SlateBlue,则需要在包含颜色的类型上使用GetField()

我想你是混淆类型(类/结构)和实例在这里。 Aquamarine包含Color类型的实例。这与类型本身不一样。

+0

嗯,实际上它甚至不是类的一个实例,它只是一个变量,它持有对类实例的引用。 – Guffa

+0

@ Guffa通常是的,但['MigraDoc.DocumentObjectModel.Color'](http://gitorious.org/pdfsharp/pdfsharp/blobs/eeff3cf38c18525af8bed2e44df76af38294a956/MigraDoc/code/MigraDoc.DocumentObjectModel/MigraDoc.DocumentObjectModel/Color.cs)是一个ValueType。 – Botz3000