我已经能够使用反射成功执行其他方法但我现在得到TargetInvocationException
。虽然TargetInvoationException
将我指向methodInfo.Invoke
方法,但逐步执行代码会显示调用Load
时SampleXMLToDataTable
方法中发生的异常。 SampleXMLToDataTable
是与public static
在同一类中的Load
方法。当代码尝试输入SampleXMLToDataTable
时会抛出错误。
使用反射调用其他方法中的方法是否存在问题?
通过反射调用的代码:
private Object CreateXMLDataLoaderInstance(string xml)
{
object o = null;
Assembly demandAssembly = LoadSampleDemandAssembly();
Type assemblyType = demandAssembly.GetType("SampleDemand.XMLDataLoader");
MethodInfo methodInfo = assemblyType.GetMethod("Load");
o = Activator.CreateInstance(assemblyType, new Object[1] { true });
Object[] oParamArray2 = new Object[1];
methodInfo.Invoke(o, new Object[1] { xml });//TargetInvocationException
return o;
}
它试图调用的方法:
public void Load(string xml)
{
XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(xml);
XmlNode settingsNode = null;
foreach (XmlNode xNode in xDoc.FirstChild.ChildNodes)
{
string name = xNode.Name;
string wsx = xNode.ChildNodes[0].OuterXml;
XmlDocument doc = new XmlDocument();
doc.LoadXml(wsx);
DataTable dt = SampleXMLToDataTable(doc);//Where the code breaks
XMLSample xmlWS = new XMLSample(dt, wsx, name);
this.sample.Add(name, xmlWS);
}
if (settingsNode != null)
{
settings = GetSettings(settingsNode);
}
}
答案 0 :(得分:1)
使用反射调用其他方法中的方法是否存在问题?
不,TargetInvocationException
表示该方法已被反射成功调用,但目标方法引发了异常。查看InnerException
的{{1}}属性,了解目标方法引发的异常的详细信息。
答案 1 :(得分:1)
您的错误只是意味着在调用的方法中某处抛出异常。这正是你所指出的。您的SampleXMLToDataTable
方法会抛出异常。这与通过反射调用它无关。我怀疑如果你直接调用它,你会在完全相同的位置得到一个例外。
这不是反射的限制,你只是因为你通过反射调用它而得到一个不同的异常,尽管TargetInvocationException
的内部异常应该会给你更多的信息。