变量作为外部XML文件的函数调用
本文关键字:文件 函数调用 XML 外部 变量 | 更新日期: 2023-09-27 18:04:35
我正在为特定的匹配条件编写一个文本文件解析器,并且在几个文件中我需要做一些自定义操作。我想做的是将使用的自定义过程的名称与其他规则一起存储在外部XML文件中。大多数人不会使用这个,我找到了这个关于动作调用的答案:
函数名变量
上面有以下字典定义
private static readonly IDictionary<string,Action<string>> actionByType =
new Dictionary<string,Action<string>>
在当前程序中从XML文件添加元素(将添加这两个元素)
foreach (XmlNode node in nodes)
{
Client holding = new Client();
holding.has_custom =
Convert.ToBoolean(
node.SelectSingleNode("has_custom").InnerText);
holding.custom_call =
node.SelectSingleNode("custom_call").InnerText;
clients.Add(holding);
}
当我进行这些操作时,我如何将自定义调用的名称分配为要在字典中调用的操作?然后我使用一个case语句与通用解析作为默认值吗?
我不确定我是否正确理解你,但是你可以像这样分配动作/函数(更具体的是委托):
actionByType.Add("write", text => Console.WriteLine(text));
actionByType.Add("write2", Console.WriteLine);
或者像这样:
void someAction(string someString)
{
Console.WriteLine(someString);
}
...
actionByType.Add("write", someAction);
然后像这样调用:
actionByType["write"]("Hello World!");
在你的例子中应该是:
actionByType[holding.custom_call]("What ever you need that string argument for");
这里是小提琴https://dotnetfiddle.net/oFuEeF
首先,使用反射获得适当的MethodInfo。这应该是一个静态方法,并且应该驻留在包含所有xml可访问方法的静态类中。
var method = typeof(MyStoredTypes).GetMethod(methodName, BindingFlags.Public | BindingFlags.Static)
您还需要一个ParameterExpression来捕获传入的字符串。
var param = Expression.Parameter(typeof(string));
最后,System.Linq.Expression.Call为您的调用创建表达式树,Lambda它,并编译它。
var act = Expression.Lambda<Action<string>>(
Expression.Call(param, method),
new ParameterExpression[] { param })
.Compile();