我需要进行一些数学运算,例如:a + b,a-b,a / b,a * b等等。
我想知道是否存在Operator返回类型,所以当我调用方法(返回运算符)来使用返回的数据时(所以运算符)。
如果不存在,我怎样才能从字符串中获取该运算符。例如:
string myOperator = "+";
int a = 5, b = 10;
int outcome = 0;
我需要做:
outcome = a + b;
所以我需要那个+运算符。如果我创建一个方法让我以某种方式运算符,我应该使用什么作为返回类型?
答案 0 :(得分:5)
不,运营商没有退货类型。但是,您可以使用Func<T1,T2,R>
创建一个具有运算符行为的仿函数,但具有函数的语法。
Func<int,int,int> myOperator1 = (x,y) => (x+y);
Func<int,int,int> myOperator2 = (x,y) => (x-y);
int a = 5, b = 10;
int outcome1 = myOperator1(a, b); // Returns 15
int outcome2 = myOperator2(a, b); // Returns -5
答案 1 :(得分:3)
C#中没有这样的操作符返回类型。您需要在C#中手动解析运算符。请参阅此http://www.c-sharpcorner.com/UploadFile/patricklundin/MathExpParser12062005062213AM/MathExpParser.aspx或创建自己的解析器。
int a = 3, b = 7;
Operator(a, b, "+"); // 10
int Operator (int op1, int op2, string op)
{
if (op == "+") return op1 + op2;
if (op == "-") return op1 - op2;
if (op == "*") return op1 * op2;
if (op == "/") return op1 / op2;
throw new ArgumentException("Specify a valid operator", "op");
}
答案 2 :(得分:0)
您的问题是......我如何解析我想要的运算符,用字符串表示?
大概过于简单......但也许是这样的?
int fuzzyMath(int a, int b, string literalOperator) {
string cleanedOperator = literalOperator.Trim();
if ("+".Equals(cleanedOperator )) {
return a+b;
} else if ("-".Equals(cleanedOperator )) {
return a-b;
} //and so on
}
我不确定您是否可以将运算符派生为可在表达式中自由使用的类型或值,但您可以测试预期的文字值并根据该值进行计算...