2010-12-05 2 views
2

Я работаю над проектом, где мне нужно оценить некоторые формулы в VB.NET. Я использовал MS Script Control для оценки некоторых простых логических/математических формул.Оценка динамических строковых формул в .NET?

Однако теперь я столкнулся с рассмотрением строковых выражений, которые задают переменные в моей программе для определенных значений. Так, например, скажем, у меня есть следующие:

Dim netPrice As Decimal 
Dim expressionFormula As String = "netPrice = 0" 

Мне нужно, чтобы иметь возможность оценить «expressionFormula» и установите переменную netPrice 0. Я пытался различные комбинации .AddObject метод в MS Script Control, но пока ничего не сделано.

Я должен упомянуть, что этот пример предназначен только для иллюстрации, в реальном сценарии задействованы несколько объектов DataTable из типизированного DataSet. В конце концов, некоторые из полей в моем DataTable, возможно, должны быть установлены на определенные константные значения на основе этих динамических выражений.

Спасибо за помощь!

+0

Почему вы отметили этот вопрос C#? Я не вижу упоминания о C# ... – 2010-12-05 16:42:09

+0

@Mark: Вы правы. Я как бы понял, что сначала будет VB/C#, но теперь я не уверен. Я удалю тег C#. – Overhed 2010-12-05 18:35:50

ответ

3

Для такой функциональности вам нужно будет написать собственный анализатор и оценщик.

Посмотрите на класс Linq Expression - это может помочь.

В качестве альтернативы, в зависимости от вашего подхода вы можете писать и компилировать динамические классы, используя CSharpCodeProvider, чтобы скомпилировать ваши выражения как классы/сборки C#.

+0

Спасибо за ваш ответ. В итоге я стал более строгим подходом к тому, как можно написать формулы (что позволяет мне их разобрать) и использовать синтаксис DataSet/DataTable для динамического ввода полей и таблиц при настройке значений. – Overhed 2010-12-08 21:09:35

2

Если вам приходится обрабатывать сложные выражения, может быть, эта библиотека может быть полезна: http://flee.codeplex.com/?

+0

Спасибо за ссылку, она не делает то, что мне нужно, но похоже, что это может быть хорошей заменой устаревшему MS Script Control, который я сейчас использую. – Overhed 2010-12-08 21:10:08