Во-первых, у меня мало опыта работы с .Net, особенно за последние 7 лет.
Я пытаюсь разработать приложение и хотел бы включить другую библиотеку (https://github.com/Giorgi/Math-Expression-Evaluator)
Эта библиотека позволяет мне вычислять такие математические выражения, как Evaluate("a+b", a: 1,b: 1)
. Сигнатура метода public decimal Evaluate(string expression, object argument = null)
- Я хотел бы лучше понять, как .Net переводит аргументы, разделенные запятыми, в один «аргумент».
- Я не уверен, как создать этот аргумент динамически... например, перебирая список значений и создавая объект, который будет соответствовать соответствующему аргументу для этой подписи.
Я действительно просто ищу указатели на документацию и дополнительную информацию. Спасибо за все.
РЕДАКТИРОВАТЬ: Извините.. намеренно оставил его широким, потому что я не искал людей, которые выполняли бы мою работу за меня.. просто не могу найти отправную точку для проведения собственного исследования.
Метод называется так
dynamic engine = new ExpressionEvaluator() ;
engine.Evaluate("(c+b)*a", a: 6, b: 4.5, c: 2.6)) ;
В теле Evalute() находится этот код (который превращает этот аргумент в словарь пар строк, десятичных чисел.
if (argument == null)
{
return new Dictionary<string, decimal>();
}
var argumentType = argument.GetType();
var properties = argumentType.GetProperties(BindingFlags.Instance | BindingFlags.Public)
.Where(p => p.CanRead && IsNumeric(p.PropertyType));
var arguments = properties.ToDictionary(property => property.Name,
property => Convert.ToDecimal(property.GetValue(argument, null)));
return arguments;
Что я хотел бы сделать, так это проанализировать строку типа «a: 1, b: 2» и превратить ее в объект, соответствующий этой подписи Evaluate()
.
new { ... }
подразумевается в пункте 1? - person xanatos   schedule 06.06.2018Evaluate()
вообще соответствует этой сигнатуре метода. - person David   schedule 06.06.2018Evaluate
также перегружен, поэтому приведенный вами пример, скорее всего, вызывает метод с сигнатуройprivate decimal Evaluate(string expression, Dictionary<string, decimal> arguments)
. - person awh112   schedule 06.06.2018public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
... Вау! - person xanatos   schedule 06.06.2018DynamicObject
просто для того, чтобы проделать этот трюк. - person xanatos   schedule 06.06.2018engine
также необходимо объявить какdynamic
- person DavidG   schedule 06.06.2018