2016-04-22 52 views
0

我已經看到了有關如何將字符串轉換爲類類型的示例,但是我無法將相同的邏輯應用於具有構造函數的類,該構造函數本身需要一個字符串作爲參數。這是我在其他職位上看到的。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」字符串鍵入然後實例化它。感謝您的幫助。

回答

0

你仍然可以使用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

0

您可以嘗試查找構造函數並調用它。

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

Activator.CreateInstance已經下列overload

創建使用的指定類型的實例構造函數 與指定的參數最匹配。

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