从string中指定的类名创建对象

时间:2013-08-15 22:41:11

标签: c# class object casting

我在网页上有一个下拉列表,其中包含所有类名的列表,在C#代码中我需要从下拉列表中实例化所选项的对象并调用它的方法。所有课程都有类似的方法。

 String sCalclationType = "N0059";
 var Calculator = Activator.CreateInstance("Calculator", sCalclationType ); 
 var count =  Calculator.DoCalculation();

我试过播放显示“无法将类型'System.Runtime.Remoting.ObjectHandle'转换为'CypressDataImport.DiabetesHelper.NQF0059'”,另外我需要转换为需要与下拉项相同的类型,所以不知道如何那样做。

//var calc = (N0059)Calculator; 

我该如何处理这种情况?

2 个答案:

答案 0 :(得分:2)

见这里:

试试这个:

String sCalclationType = "N0059";
ObjectHandle handle = Activator.CreateInstance("Calculator", sCalclationType ); 
var Calculator = (N0059)handle.Unwrap();
var count = Calculator.DoCalculation();

String sCalclationType = "N0059";
ObjectHandle handle = Activator.CreateInstance("Calculator", sCalclationType );
Object p = handle.Unwrap();
Type t = p.GetType();
MethodInfo method = t.GetMethod("DoCalculation");
var count = method.Invoke(p, null); 

答案 1 :(得分:1)

您需要返回Activator.CreateInstace()方法返回的包装对象。

要做到这一点,请查看ObjectHandle.Unwrap on MSDN

另请确保您使用的是类型的完全限定名称,如here所述。

以下是一个使用示例:

Object obj = Activator.CreateInstance(System.Reflection.Assembly.GetExecutingAssembly().FullName, "CypressDataImport.DiabetesHelper.NQF0059.N0059").Unwrap();
N0059 calculator= (N0059)obj;