我有以下c#代码。基类和从基类继承的类。我在一个特殊的List中使用这个基类。这个列表也有ReadListAsXmlAs成员。
public class ResultSetBase
{
some Members
}
public class ResultSetBaseSweep : ResultSetBase
{
some other Members
}
public class ResultList<T> where T : ResultSetBase
{
public ResultList<T> ReadListAsXmlAs(params string[] path)
{
...
}
}
在另一个方法中,我想创建一个ResultList类型的动态对象。我只在运行时知道ResultList是哪个类。(例如ResulstSetBaseSweep,或任何其他继承自ResultSetBase)。
我创建了一个这种类型的动态对象。
Type myType = Type.GetType("Class in String Format");
Type listtype = typeof(ResultSaver.ResultList<>).MakeGenericType(myType);
object resultlist = Activator.CreateInstance(listtype);
现在我需要调用ReadListAsXmlAs方法。因为它是对象类型,当我尝试调用
时,编译器会报错。resultlist.ReadListAsXmlAs(...);
所以我试着把它叫做Reflections:
myType.InvokeMember("ReadListAsXmlAs", BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public, null, resultlist, new object[] { filenames.ToArray() });
然后我得到编译器错误:ReadListAsXmlAs未找到!怎么做才是正确的呢?
我找到了解决问题的方法:
Type myType = Type.GetType(LstBoxClass.SelectedItem.ToString());
Type listtype = typeof(ResultSaver.ResultList<>).MakeGenericType(myType);
object resultlist = Activator.CreateInstance(listtype);
MethodInfo method = listtype.GetMethod("ReadListAsXmlAs");
method.Invoke(resultlist, new Object[] {filenames.ToArray()});