我有一个类,我尝试在Avtivator.CreateInstance的帮助下创建,因为我在运行时将类名称作为字符串获取。所以,在那个类中,我有一个方法有一个List类型的参数,现在我的问题是如何使用MethodInfo调用这种类型的方法。 e.g。
Class XHospital{
private string HospitalName;
private IList<string> docList;
public void SetDoctorList(List<string> docList){
this.docList = docList;
// some other code snippet here after getting docList
}
// .... rest of the code
}
public void SetHospitalDetails(string hospitalName, string methodName){
Type NewType = Type.GetType(hospitalName);
Object NewClass = Activator.CreateInstance(NewClass, new object[]{});
MethodInfo method = NewType.GetMethod(methodName);
IList<string> docs = new List<string>(){ "doc1", "doc2" };
method.Invoke(NewClass, new object[] { docs });//------------- here i am
// getting exception stating ...
/* Object of type 'System.Collections.Generic.List`1[System.Object]'
cannot be converted to type
'System.Collections.Generic.List`1[System.String]' */
}
请帮助我做错了... 注意:我不允许在XHospital类中进行任何更改。所以我不能自己处理它。*** 提前谢谢。
答案 0 :(得分:0)
调用的方法或构造函数的参数列表。这是一个对象数组,其数量,顺序和类型与要调用的方法或构造函数的参数相同。
如果你需要传入确切的具体类型(IList<String>
),那么修复就是不要让你的变量更抽象(List<String>
)。所以试试这个:
List<string> docs = new List<string>(){ "doc1", "doc2" };
method.Invoke(NewClass, new object[]{docs} );
答案 1 :(得分:0)
您的代码是正确的,除了: Object NewClass = Activator.CreateInstance(NewClass,new object [] {}); 它应该是 Object NewClass = Activator.CreateInstance(NewType,new object [] {});
效果很好。 如果仍有问题,请尝试直接设置字段值。 field.SetValue(NewClass,any);