В настоящее время я создаю полусложный калькулятор, который по сути представляет собой преобразование из предоставленной мной электронной таблицы Excel.
Большую часть я прибил, но в электронной таблице Excel есть часть, гдемножественные вычисления происходят между 6 строками и 7 столбцами, но проблема в том, что вычисления происходят в произвольном порядке.
Так, например, Row0[Column1]
вычисляется с использованием (Row2[Column4] * Row2[Column5])
и Row1[Column4]
рассчитывается с использованием (Row4[Column2] / Row5[Column1])
и т. д. Вы поймете идею.
Я думал об использовании 2D-массива, но боюсь, что значения будут рассчитываться в определенном порядке, поэтому не имеют значениякогда они достигнуты.Насколько я знаю, сначала будет вычисляться Row1 , затем Row2 , Row3 и т. Д.
Итак, без созданияпеременная для каждой ячейки в моей таблице Excel (и упорядочив ее соответствующим образом), есть ли способ, которым я могу рассчитать это, используя C #?
Я был бы очень признателен за любую помощь, совет, указатели, что вы думаете, возможно -Я хотел бы услышать это!
EDIT После реализации класса Lazy, предоставленного @ dtb , я получил следующий код.Это прямая копия предоставленной мной таблицы Excel, включая указатели и расчеты.
var sr = new Lazy<decimal>[6, 6];
sr[0, 0] = new Lazy<decimal>(() => sr[1, 0].Value - eNumber);
sr[0, 3] = new Lazy<decimal>(() => sr[0, 4].Value - sr[1, 0].Value - sr[1, 4].Value);
sr[0, 4] = new Lazy<decimal>(() => sr[0, 0].Value * edD);
sr[0, 5] = new Lazy<decimal>(() => sr[0, 0].Value);
sr[1, 0] = new Lazy<decimal>(() => sr[1, 5].Value);
sr[1, 4] = new Lazy<decimal>(() => sr[1, 0].Value * edD);
sr[1, 5] = new Lazy<decimal>(() => sr[2, 0].Value + sr[2, 5].Value);
sr[2, 0] = new Lazy<decimal>(() => eNumber * rRate);
sr[2, 4] = new Lazy<decimal>(() => sr[2, 0].Value * hdD);
sr[2, 5] = new Lazy<decimal>(() => sr[1, 5].Value);
sr[3, 1] = new Lazy<decimal>(() => sr[2, 5].Value);
sr[4, 2] = new Lazy<decimal>(() => eNumber * (ePc / 100) + sr[2, 0].Value * (hlPc / 100) - sr[3, 1].Value);
sr[5, 0] = new Lazy<decimal>(() => (sr[0, 0].Value + sr[1, 0].Value + sr[2, 0].Value) / ePerR);
sr[5, 2] = new Lazy<decimal>(() => sr[5, 0].Value / rLifecycle);
sr[5, 4] = new Lazy<decimal>(() => sr[5, 2].Value);
sr[5, 5] = new Lazy<decimal>(() => sr[5, 0].Value + sr[5, 2].Value - sr[5, 4].Value);
Однако я получаю следующую ошибку ValueFactory attempted to access the Value property of this instance.
Погуглив, ошибка вернула кучу спам-сайтов типа поиска.
Marko