我正在学习Expression
和他们的表达树一起使用它们与IronPython(但现在这无关紧要).
我要做的是,创建一个表达式树,如下面的lambda:
Funcfunc = (s,t) => s + t;
我目前的功能是这样的:
public static Expression> StringConcatSelector () { var parameterParam = Expression.Parameter(typeof(T), "x"); var paramToString = typeof(T).GetMethods().FirstOrDefault(s=>s.Name=="ToString"); var parameter = Expression.Call(parameterParam, paramToString); var intParameterParam = Expression.Parameter(typeof(int), "s"); var intParameterToString = typeof(int).GetMethods().FirstOrDefault(s => s.Name == "ToString"); var intParameter = Expression.Call(intParameterParam, intParameterToString); var stringConcat = typeof(string).GetMethods().FirstOrDefault(s => s.Name == "Concat"); var result = Expression.Call(stringConcat, parameter, intParameter); return Expression.Lambda > (result, parameterParam, intParameterParam); }
在Expression.Call
中String.Concat
不起作用,因为无效的参数计数这样.所以我想我需要这样的东西:
创建一个List
变量表达式
将两个值都添加到列表中
使用String.Concat
带有list-表达.
我对吗?
如果是,我如何创建List-variable(或Array),添加两个值以将其作为我的参数String.Concat
?
String.Concat
方法有11(!)重载,你是随机的.
最适合您的情况是
public static String Concat(String str0, String str1)
你可以通过使用以下Type.GetMethod
重载获得
public MethodInfo GetMethod(string name, Type[] types)
其中types
数组代表的方法参数的类型:
var stringConcat = typeof(string).GetMethod("Concat", new[] { typeof(string), typeof(string) });