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");
答
您可以尝试查找构造函数并调用它。
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
)
感谢您的快速回复。然而,当我试图通过instance.DoSomething()访问类方法时,我用String参数创建一个实例似乎很好。我收到一个错误 - 对象不包含DoSomething的定义....当我实例化类定期的方式,我可以看到类的方法。不知道发生了什么事。 – user2217057
@ user2217057:这是因为'CreateInstance'将实例作为'object'返回,所以必须将其转换为'ExampleClass'以便能够使用该类的正确成员。 –
如果类类型是根据给定的字符串类型在循环中动态决定的,您将如何进行类型转换?我可能会遗漏一些东西,但如果类类型已知,则将对象类型转换为特定的类类型将会起作用。 – user2217057