首页 > 解决方案 > 如何通过表达式模拟字符串+字符串?

问题描述

如何通过 c# 表达式模拟字符串 + 字符串表达式。Expression.Add 方法不起作用。

字符串 + 字符串表达式,如

“111”+“222”=“111222”

谢谢

标签: c#expression

解决方案


您需要调用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 Methodof string.Concat(string, string)),而不是 a MethodCallExpression。因此编译器实际上使用@kalimag 的答案,而不是我的。然而,两者都将起作用。


推荐阅读