我正在开发一个C#应用程序,我需要动态求解方程式。例如,我现在有以下内容:
decimal[] v1s = GetV1Values();
decimal[] v2s = GetV2Values();
if (v1s.Length != v2s.Length)
{
throw new Exception();
}
string[] equations = new string[] {
"$V1 + $V2",
"$V1 * 3 - $V2",
"$V1 - $V2"
};
foreach (var equation in equations)
{
for (var i=0; i<v1s.Length; i++)
{
var op1 = v1s[i];
var op2 = v2s[i];
var result = ? // I'm not sure how to plug op1 and op2 into equation
Console.WriteLine(equation + " = " + result;
}
}
如何从值数组中获取值并将其插入equation
并获得结果?我愿意在C#中使用不同的方法来解决这个问题。我只是不确定如何评估C#中的方程式。
答案 0 :(得分:0)
Yon可以通过使用Delegates数组来完成此操作。您可以存储方法调用,而不是将方程式存储为字符串数组。 像
这样的东西Func<int>[] equations = { eqn1, eqn2, eqn3 };
foreach (var equation in equations)
{
for (var i=0; i<v1s.Length; i++)
{
var op1 = v1s[i];
var op2 = v2s[i];
var result = equation(op1, op2);
Console.WriteLine(equation + " = " + result;
}
}
public static int eqn1 (int v1, int v2)
{
return v1 + v2;
}
public static int eqn2 (int v1, int v2)
{
return v1 * 3 - v2;
}
public static int eqn3 (int v1, int v2)
{
return v1 - v2;
}
<强>更新强> 以下是工作示例:
public delegate decimal Eqn(decimal v1, decimal v2);
public static void Main(string[] args)
{
decimal[] v1s = {4, 5, 6}; //GetV1Values();
decimal[] v2s = {2, 3, 4}; //GetV2Values();
Eqn[] equations = { eqn1, eqn2, eqn3 };
foreach (var equation in equations)
{
for (var i=0; i<v1s.Length; i++)
{
var op1 = v1s[i];
var op2 = v2s[i];
var result = equation(op1, op2);
Console.WriteLine("Result = " + result);
}
}
}
public static decimal eqn1 (decimal v1, decimal v2)
{
return v1 + v2;
}
public static decimal eqn2 (decimal v1, decimal v2)
{
return v1 * 3 - v2;
}
public static decimal eqn3 (decimal v1, decimal v2)
{
return v1 - v2;
}
答案 1 :(得分:0)
一旦你走下评估表达的道路,就必须知道
在不知道某些背景的情况下,我无法帮助你。我将做出一些广泛的假设,并提出一些可能对你有帮助的想法。
此外,在表达式中放置值的一种简单方法是使用string.format