Is there any calculation engine for C# that can automatically recalculate dependent fields when a value changes?
Let me freestyle for a second, I'm imagining something like this..
Field<double> quantity = Field.Create<double>("Quantity");
Field<double> unitCost = Field.Create<double>("Unit Cost");
Field<double> total = Field.Create<double>("Total");
total.Calculation((q,uc) => q * uc, quantity, value);
// would have signature something like this:
// void Calculation<TR,T1,T1>(Func<TR,T1,T2>, Field<T1>, Field<T2>)
This would set up fields that auto-propagate dependent values.
quantity.Value = 5.0;
unitCost.Value = 1.5;
Assert.That(total.Value, Is.EqualTo(7.5));
Obviously this is a simple example, the end uses would be much more akin to the calculations of a complex spreadsheet.
Thinking further it would be amazing if the field/cells would support change notification.
Have you seen http://ncalc.codeplex.com ?
It's extensible, fast (e.g. has its own cache) enables you to provide custom functions and varaibles at run time by handling EvaluateFunction/EvaluateParameter events. Example expressions it can parse:
It also handles unicode & many data type natively. It comes with an antler file if you want to change the grammer. There is also a fork which supports MEF to load new functions.
It also supports logical operators, date/time's strings and if statements.
a solution
You could possibly do automatic recalculation by implementing INotifyPropertyChanged then doing something like
On notifypropertyupdated in the class