正在根据字符串中指定的类名创建对象

本文关键字:创建对象 字符串 | 更新日期: 2023-09-27 18:27:47

我在一个网页上有一个dropdownlist,它有所有类名的列表,在C#代码中,我需要实例化dropdownlists中所选项目的对象并调用它的方法。所有类都有类似的方法。

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

我尝试了强制转换,它显示"无法将类型"System.Runtime.Remoting.ObjectHandle"转换为"CypressDataImport.DiabetesHelper.NQF0059",我还需要强制转换为需要与下拉项相同的类型,所以不知道如何做到这一点。

//var calc = (N0059)Calculator; 

我该如何处理这种情况?

正在根据字符串中指定的类名创建对象

请参阅此处:

  • http://msdn.microsoft.com/en-us/library/d133hta4.aspx

试试这个:

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); 

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

要做到这一点,请查看MSDN上的ObjectHandle.Dunwrap。

还请确保您使用的是此处所述类型的完全限定名称。

以下是用法示例:

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