我想采用一个数学表达式,它接受变量并打印(赋值给字符串)填充变量的公式.
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"结束;
思考?
您可以使用该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)"。
| 归档时间: |
|
| 查看次数: |
1069 次 |
| 最近记录: |