1

我在网页上有一个下拉列表,其中包含所有类名的列表,在 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; 

我该如何处理这种情况?

4

2 回答 2

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); 
于 2013-08-15T22:56:08.493 回答
1

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

为此,请查看MSDN 上的 ObjectHandle.Unwrap

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

下面是一个使用示例:

Object obj = Activator.CreateInstance(System.Reflection.Assembly.GetExecutingAssembly().FullName, "CypressDataImport.DiabetesHelper.NQF0059.N0059").Unwrap();
N0059 calculator= (N0059)obj;
于 2013-08-15T22:57:00.927 回答