我在网页上有一个下拉列表,其中包含所有类名的列表,在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;
我该如何处理这种情况?
答案 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;