C#将字符串转换为具有带字符串参数构造函数的类

问题描述:

我已经看到了有关如何将字符串转换为类类型的示例,但是我无法将相同的逻辑应用于具有构造函数的类,该构造函数本身需要一个字符串作为参数。这是我在其他职位上看到的。C#将字符串转换为具有带字符串参数构造函数的类

Type type = Type.GetType("classNameAsString"); 
object instance = Activator.CreateInstance(type); 

我想要做的是同样的适用于这种情况下

public class ExampleClass 
{ 
    public ExampleClass(string strParameter) 
    { 
    } 
} 

我通常会实例化ExampleClass中的

var exClassInst = new ExampleClass("stringParam"); 

我怎样才能达到同样的,而是先转换“ExampleClass”字符串键入然后实例化它。感谢您的帮助。

你仍然可以使用Activator但使用CreateInstance超载与构造函数参数:

Type type = Type.GetType("Namespace.ExampleClass"); 
object instance = Activator.CreateInstance(type, "string param"); 
+0

感谢您的快速回复。然而,当我试图通过instance.DoSomething()访问类方法时,我用String参数创建一个实例似乎很好。我收到一个错误 - 对象不包含DoSomething的定义....当我实例化类定期的方式,我可以看到类的方法。不知道发生了什么事。 – user2217057

+0

@ user2217057:这是因为'CreateInstance'将实例作为'object'返回,所以必须将其转换为'ExampleClass'以便能够使用该类的正确成员。 –

+0

如果类类型是根据给定的字符串类型在循环中动态决定的,您将如何进行类型转换?我可能会遗漏一些东西,但如果类类型已知,则将对象类型转换为特定的类类型将会起作用。 – user2217057

您可以尝试查找构造函数并调用它。

ConstructorInfo ci = type.GetConstructor(BindingFlags.Instance | BindingFlags.Public, null, new Type[0], null); 
return (ExampleClass)ci.Invoke(new Object[] { "stringParam"); 

Activator.CreateInstance已经下列overload

创建使用的指定类型的实例构造函数 与指定的参数最匹配。

public static object CreateInstance(
    Type type, 
    params object[] args 
)