gpt4 book ai didi

c# - 从 xml 文件调用方法

转载 作者:行者123 更新时间:2023-12-02 05:11:50 25 4
gpt4 key购买 nike

我有一个名为 Methods.xml 的 xml 文件,如下所示

....
<Method>
<MethodName>foo</MethodName>
<MethodParams>fooString1, fooString2</MethodParams>
</Method>
<Method>
<MethodName>foo</MethodName>
<MethodParams>fooString5, fooString6</MethodParams>
</Method>
....

我有如下方法

 void foo(string param1, string param2)
{
MessageBox.Show(param1 +" : " + param2);
}

我可以获得如下节点值,我想根据xml文件节点的值动态调用方法

XDocument _XDocument = XDocument.Load(@"Methods.xml");

var _XmlQuery = from _Element in _XDocument.Descendants("Method")
select
new
{
_MethodName = _Element.XPathEvaluate("string(./MethodName)") as string,
_MethodParams = _Element.XPathEvaluate("string(./MethodParams)") as string,

};


foreach (var _Node in _XmlQuery)
{

string _MethodName = _Node._Method.Trim();
MethodInfo _Method = this.GetType().GetMethod(_MethodName);

List<object> _Params = new List<object>();
object[] _XmlParams = _Nodes.MethodParams.Split(',');
foreach (object arg in XmlParams)
{
_Params.Add(arg);
}
_Method.Invoke(this, _Params.ToArray());

}

但是当我调试时,我在 _Method.Invoke(this, _Params.ToArray()); 行中出错。

提前致谢。

已编辑

错误消息是:对象引用未设置到对象的实例。

最佳答案

默认情况下,Type.GetMethod( string ) 仅返回标记为公共(public)的方法。

您需要传递一些 BindingFlags 选项:

...GetMethod( _MethodName,
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Instance
);

关于c# - 从 xml 文件调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15311317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com