变量作为外部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语句与通用解析作为默认值吗?

变量作为外部XML文件的函数调用

我不确定我是否正确理解你,但是你可以像这样分配动作/函数(更具体的是委托):

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();