Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从字符串创建类_C#_Class_Reflection_Activator - Fatal编程技术网

C# 从字符串创建类

C# 从字符串创建类,c#,class,reflection,activator,C#,Class,Reflection,Activator,我正在尝试从字符串中保存的名称创建一个类。我尝试了很多方法,但总是得到“值不能为空” 这是课程 public static readonly MigraDoc.DocumentObjectModel.Color Aquamarine Member of MigraDoc.DocumentObjectModel.Colors 海蓝宝石是MigraDoc.DocumentObjectModel.Colors中的一个类,是颜色的一个类 以下是我尝试过的方法,它与我认为应该有效的方法非常接近: Col

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

这是课程

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

我觉得解决办法应该不会太远。。。有什么想法吗?:)

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

如果希望该类型中名为
SlateBlue
的字段,则需要在包含颜色的类型上使用


我认为您在这里混淆了类型(类/结构)和实例<代码>海蓝宝石包含类型
颜色
的实例。这与类型本身不同

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

我不知道类名允许
+
在其中。根据这一点,是的,实际上它甚至不是类的实例,它只是一个包含类实例引用的变量。@Guffa通常是的,但是一个ValueType。