我想采用一个带变量的数学表达式并打印(分配给字符串)填充了变量的公式。
int iTwo = 2;
int iResult = 0;
iResult = iTwo * iTwo;
string theString = (iTwo * iTwo).ToString();
在上面的代码中iResult = 4 and theString = "4"
我想做一些填充变量并返回数学表达式的事情,例如:
theString = (iTwo * iTwo).ExpressionToString();
最后是 theString = "2 * 2";
想法?
最佳答案
您可以使用 Expression<>
类型。
public static string ExpressionToString<T>(Expression<Func<T>> e)
{
var un = e.Body as BinaryExpression;
if (un != null)
{
var left = un.Left.ToString();
var leftEnd = left.Split('.').LastOrDefault();
var right = un.Right.ToString();
var rightEnd = right.Split('.').LastOrDefault();
return e.Body.ToString().Replace(left, leftEnd).Replace(right, rightEnd);
}
return e.Body.ToString();
}
Console.WriteLine(ExpressionToString(() => iTwo * iTwo));
//prints (iTwo * iTwo)
您需要使方法更复杂才能解析比简单的二进制表达式更复杂的事物,但这是一般的想法。你可以做 e.Body.ToString()
,但由于为您的 lambda 生成匿名类型的方式,这可能会导致丑陋的结果,例如:"(value(TestApp.Program+<>c__DisplayClass3).iTwo * value(TestApp.Program+<>c__Dis
playClass3).iTwo)"
.
关于c# - 将表达式的值打印为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11351694/