当前位置:  开发笔记 > 编程语言 > 正文

为字符串连接两个对象创建表达式树

如何解决《为字符串连接两个对象创建表达式树》经验,为你挑选了1个好方法。

我正在学习Expression和他们的表达树一起使用它们与IronPython(但现在这无关紧要).

我要做的是,创建一个表达式树,如下面的lambda:

Func func = (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.CallString.Concat不起作用,因为无效的参数计数这样.所以我想我需要这样的东西:

创建一个List变量表达式

将两个值都添加到列表中

使用String.Concat带有list-表达.

我对吗?

如果是,我如何创建List-variable(或Array),添加两个值以将其作为我的参数String.Concat



1> Ivan Stoev..:

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

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有