将表达式的值打印为字符串

pSt*_*tan 6 .net c#

我想采用一个数学表达式,它接受变量并打印(赋值给字符串)填充变量的公式.

int iTwo = 2;
int iResult = 0;

iResult = iTwo * iTwo;

string theString = (iTwo * iTwo).ToString();
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,iResult = 4,theString ="4"

我想做一些填充变量并返回数学表达式的东西,如:

theString = (iTwo * iTwo).ExpressionToString();    
Run Code Online (Sandbox Code Playgroud)

并以theString ="2*2"结束;

思考?

Tim*_* S. 5

您可以使用该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)
Run Code Online (Sandbox Code Playgroud)

您需要使该方法更复杂,以解析比简单的二进制表达式更复杂的事物,但这是总体思路。你可以只是做e.Body.ToString(),但是由于匿名类型为您的lambda表达式进行的方式,即可以得到难看的结果,例如:"(value(TestApp.Program+<>c__DisplayClass3).iTwo * value(TestApp.Program+<>c__Dis playClass3).iTwo)"