c# - 如何通过表达式模拟字符串+字符串?
问题描述
如何通过 c# 表达式模拟字符串 + 字符串表达式。Expression.Add 方法不起作用。
字符串 + 字符串表达式,如
“111”+“222”=“111222”
谢谢
解决方案
您需要调用string.Concat
(C# 编译器将字符串连接转换为string.Concat
对引擎盖下的调用)。
var concatMethod = typeof(string).GetMethod("Concat", new[] { typeof(string), typeof(string) });
var first = Expression.Constant("a");
var second = Expression.Constant("b");
var concat = Expression.Call(concatMethod, first, second);
var lambda = Expression.Lambda<Func<string>>(concat).Compile();
Console.WriteLine(lambda()); // "ab"
实际上,如果你写
Expression<Func<string, string string>> x = (a, b) => a + b;
并在调试器中检查它,你会看到它生成 a BinaryExpression
(with a Method
of string.Concat(string, string)
),而不是 a MethodCallExpression
。因此编译器实际上使用@kalimag 的答案,而不是我的。然而,两者都将起作用。
推荐阅读
- reactjs - 在导航更改时滚动恢复到顶部
- r - R - Euromonitor 的 API 请求
- jquery - $ 未定义 Chrome Moblie
- github - 我可以修改拉取请求的“比较分支”吗?
- linux - 如何将变量值从循环 A 更新到另一个循环 B - 在 bash
- javascript - 这两个 javascript 和 jquery 语句有什么区别?
- c - C中Heap实现中的BubbleUp方法
- ios - 如何在取消时关闭滑动操作上下文菜单
- scala - 返回 Option[DataFrame] 其中 isDefined 为 false
- python - 熊猫数据框输出错误的计算