как динамически сгенерировать формулу и решить ее, выбрав несколько строк с помощью linq

#c#

#c#

Вопрос:

привет, ребята, у меня есть массив под названием tblCeMaintMatrix.toArray()) с результатом :

 [0]: { xValue = 0, Operator = 43 ' ' }
[1]: { xValue = 1, Operator = 43 ' ' }
[2]: { xValue = 12, Operator = 45 '-' }
  

я выполнил цикл foreach, чтобы решить эту проблему, однако я столкнулся с некоторыми ошибками. Я думаю, что я перепутал логику для этого..

 foreach (var a in tblCeMaintMatrix.ToArray())
{
    {
        value = operate((a.Operator).ToString(),a.xValue.Value );
    }
    decimal value2 = value;
}

private decimal operate(String a, Decimal value)
{
        Decimal Value = 0;
        if (a == " ")
        {
            Value = value   value;
        }

        if (a == "-")
        {
            Value= value - value;
        }

        if (a == "*")
        {
            Value = value * value;
        }

        if (a == "/")
        {
            Value = value / value;
        }

        return Value;
    }
  

моя проблема в том, что

a) что делает это :

0 0 = 0

1 1 = 2

12 — 12 = 0

вместо 0 1 -12.

б) значение не сохраняется.

как я могу изменить это, чтобы решить проблему? Спасибо

Ответ №1:

Непроверенный код, хотелось бы, чтобы он был правильным..

 decimal result = 0;

foreach (var a in tblCeMaintMatrix.ToArray())
{
    {
        result = operate((a.Operator).ToString(),a.xValue.Value,result);
    }
}

private decimal operate(String a, Decimal value, Decimal result)
{
     switch (a)
     {
         case " ": result  = value; break;
         case "-": result -= value; break;
         case "*": result *= value; break;
         case "/": result /= value; break;
         default: result = value; break;
     }         

     return resu<
 }
  

РЕДАКТИРОВАТЬ чтобы игнорировать первый оператор, я думаю, вам нужно установить для вашего первого оператора значение empty, например:

 [0]: { xValue = 0, Operator = '' }
[1]: { xValue = 1, Operator = 43 ' ' }
[2]: { xValue = 12, Operator = 45 '-' }
  

и посмотрите модифицированный метод Operate.

Комментарии:

1. привет, Дэнни, есть ли способ для меня игнорировать оператор первого индекса массива? чтобы составить уравнение , подобное этому 0 1 -12 , а не 0 0 1 — 12

Ответ №2:

Прямо сейчас вы передаете только одно значение своему operate методу и используете его в качестве обоих операндов. Вам также необходимо передать в функцию текущий результат вашего кода:

 Decimal total = 0;
foreach (var a in tblCeMaintMatrix.ToArray())
{
    {
        total = operate((a.Operator).ToString(),total, a.xValue.Value );
    }
    decimal value2 = value;
}

private decimal operate(String a, Decimal left, Decimal right)
{
    Decimal Value = 0;
    if (a == " ")
    {
        Value = left   right;
    }

    if (a == "-")
    {
        Value= left - right;
    }

    if (a == "*")
    {
        Value = left * right;
    }

    if (a == "/")
    {
        Value = left / right;
    }

    return Value;
}
  

Неясно, что вы используете value2 для представления в вашей исходной функции.