在我的一个项目中,我需要根据正则表达式动态调用方法。在我的一个案例中,我有这个字符串。
如果安排它理解,
And(Answered(ARef(16350,100772,null)),Not(AnyOf(ARef(16350,100772,null),[Closed temporarily])),Not(AnyOf(ARef(16350,100772,null),[Closed down])))
会喜欢这个。
And(
Answered(
ARef(
16350,
100772,
null)
),
Not(
AnyOf(
ARef(
16350,
100772,
null),
[Closed temporarily]
)
),
Not(
AnyOf(
ARef(
16350,
100772,
null),
[Closed down]
)
)
)
有没有办法调用方法名称启动的方法和(“打开括号”参数和)“关闭括号”
在上述情况下,And是一种从应答方法中获取参数的方法。等等....
请建议我找到一种方法。
答案 0 :(得分:1)
这不是正则表达式问题。您需要为字符串表示的语言实现解析器/解释器。 C#有很多解析器库/工具可以帮助你。
请参阅this list可能相关的Stackoverflow问题和答案
答案 1 :(得分:1)
public static string InvokeStringMethod(string typeName, string methodName)
{
// Get the Type for the class
Type calledType = Type.GetType(typeName);
// Invoke the method itself. The string returned by the method winds up in s
String s = (String)calledType.InvokeMember(
methodName,
BindingFlags.InvokeMethod | BindingFlags.Public |
BindingFlags.Static,
null,
null,
null);
// Return the string that was returned by the called method.
return s;
}
参考文献:http://dotnetacademy.blogspot.com/2010/10/invoke-method-when-method-name-is-in.html
http://www.codeproject.com/KB/cs/CallMethodNameInString.aspx
答案 2 :(得分:0)
但是你可以做你正在尝试使用反射的东西。您甚至可以创建一个即时组件然后运行它。
动态加载和调用对象的示例如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace ca1
{
public class A
{
public int retval(int x)
{
return x;
}
}
class Program
{
static void Main(string[] args)
{
string s ="retval";
Type t = typeof(A);
ConstructorInfo CI = t.GetConstructor(new Type[] {});
object o = CI.Invoke(new object[]{});
MethodInfo MI = t.GetMethod(s);
object[] fnargs = new object[] {4};
Console.WriteLine("Function retuned : " +MI.Invoke(o, fnargs).ToString());
}
}
}