Expression.Call(member, typeof(string).GetMethod("StartsWith", new[] { typeof(string) }), constant);
像明智的选择一样,我需要一个表达式来在字符串列表中找到逗号分隔的字符串。 我的解决方法是
filterValue.Split(",").Any(f => messageValue.Contains(f))
我需要将其转换为上述方法以调用为expression.please帮助。
答案 0 :(得分:0)
请自己进行测试,但我认为这应该可行。您可能也可以改进此代码。
var filterValue = Expression.Constant("a,b");
var messageValue = Expression.Constant("b");
var separator = Expression.Constant(new char[] { ',' });
var split = typeof(string).GetMethod("Split", new[] { typeof(char[]) });
var contains = typeof(string).GetMethod("Contains", new[] { typeof(string) });
var f = Expression.Parameter(typeof(string), "f");
var lambda = Expression.Lambda(Expression.Call(messageValue, contains, f), f);
var splitted = Expression.Call(filterValue, split, separator);
var expression = Expression.Call(typeof(Enumerable), "Any", new[] { typeof(string) }, splitted, lambda);
bool result = (bool)Expression.Lambda(expression).Compile().DynamicInvoke();