Эквивалентные VB -> C #: Eval и Execute - PullRequest
0 голосов
/ 14 ноября 2011

Я пытаюсь преобразовать часть кода из VBScript в C #. У меня есть эти строки:

string replacementMatch = ....;

...

replacementMatch = Eval(replacementMatch);

ИЛИ

Execute(replacementMatch);

Я не могу найти эквивалент в C #.

Ответы [ 5 ]

4 голосов
/ 14 ноября 2011

Функция Eval вычисляет выражение и возвращает результат. Вы не найдете эквивалент в статически типизированных языках, таких как C # и VB.NET. Есть некоторые библиотеки, которые предоставляют такую ​​функциональность, например flee .

0 голосов
/ 14 ноября 2011

В документации VBScript вы можете обнаружить, что аргументы «Eval» и «Execute» оцениваются как «как выражение VBScript».Таким образом, в коротких словах нет эквивалентов C #.

Как правило, вам следует просмотреть код vb и переписать его на C #, чтобы не требовать оценки скрипта во время выполнения.

Если вам действительно нужно создавать операторы во время выполнения и оценивать их, вы можетепопробуйте сторонние инструменты - например, "http://www.codeproject.com/KB/dotnet/evaluator.aspx" (хотя я не использовал этот конкретный инструмент - я видел очень мало ситуаций, когда это действительно необходимо).

0 голосов
/ 14 ноября 2011

Вы не найдете эквивалент.Вы можете использовать компилятор C #, но никогда не рекомендуется выполнять произвольный код в своих приложенияхРассмотрите ваши требования и посмотрите, возможно ли написание простого парсера.Проверьте System.Linq.Expressions в этом случае.

0 голосов
/ 14 ноября 2011

Вы можете добавить ссылку на Microsoft Script Control и вызвать ее функцию Eval в c #. Смотрите этот ответ.

Как я могу оценить результат логического выражения в строковом формате во время выполнения в C #?

0 голосов
/ 14 ноября 2011

Вы не можете найти точно такую ​​же функциональность, но вы можете использовать CodeDomProvider для компиляции сборки из сгенерированного кода и использовать Reflection для вызова методов из нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...