Обратиться к переменной в библиотеке по имени - C#
Формулировка задачи:
Помогите разобраться с этой библиотекой.
Суть проблемы:
Есть Что сказано в документации по этому поводу, так это то, что необходимо описать класс, где будут field, property или Function, затем этот класс подключить к Evaluator`у и можно будет парсить выражения, которые содержат переменные описанные в этом классе:
Как мне изменить MyClass, чтобы там появились возможность создавать переменные, которые содержаться в словаре?
Заранее Спасибо.
п.с. если что-то пояснил не четко, то могу уточнить не понятные места.
Dictionary<string, double>
, где содержаться сведения о переменных, к примеру: "var1", 100.5 "var2", 200.0 "var3", 20.5 Мне необходимо, что эта библиотека восприняла мои переменные, которые в словаре содержатся. Привожу код, который хотелось бы чтобы заработал: public class MyClass
{
public MyClass()
{
}
}
public static void Main()
{
Dictionary<string, double> variables = new Dictionary<string, double>();
variables.Add("var1", 100.0);
variables.Add("var2", 200.0);
variables.Add("var3", 300.0);
variables.Add("var4", 400.0);
variables.Add("var5", 500.0);
Evaluator ev = new Evaluator(eParserSyntax.cSharp);
ev.AddEnvironmentFunctions(new MyClass()); // вот тут "подключается" класс
opCode formula = ev.Parse("var5-var1*var2");// тут уже вылетает, т.к. не парсер не знает переменных
object res = formula.value;
string result = Evaluator.ConvertToString(res);
Console.WriteLine(result);
Console.ReadKey();
}Public Class class1
Public field1 As Double = 2.3
Public Function method2() As Double
Return 3.4
End Function
Public ReadOnly Property prop3() As Integer
Get
Return 4.5
End Get
End Property
End Class
Dim ev As New Eval3.Evaluator
ev.AddEnvironmentFunctions(New class1)
MsgBox(ev.Parse("field1*method2*prop3").value.ToString)Решение задачи: «Обратиться к переменной в библиотеке по имени»
textual
Листинг программы
// Преобразуем исходную строку в скомпилированный вид
PreparedExpression preparedExpression = ToolsHelper.Parser.Parse("-4+5.5*sin(1/3)*(2+5)");
CompiledExpression compiledExpression = ToolsHelper.Compiler.Compile(preparedExpression);
// Создаем список переменных, который будет использован калькулятором при вычислении
// В данном примере он пуст, поскольку в исходном выражении нет переменных
List<VariableValue> variables = new List<VariableValue>();
// Получаем результат вычисления функции
double res = ToolsHelper.Calculator.Calculate(compiledExpression, variables);