从字符串创建类

时间:2012-05-29 21:27:52

标签: c# class reflection activator

我正在尝试从字符串中保存的名称创建一个类。我尝试了很多东西,但总是得到“价值不能为空”

这是班级

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

AquaMarine 是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

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

2 个答案:

答案 0 :(得分:1)

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

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

我认为你在这里混淆了类型(类/结构)和实例。 Aquamarine包含Color类型的实例。这与类型本身不同。

答案 1 :(得分:1)

不,Aquamarine不是一个类,它是一个变量。您无法创建变量的实例...