Я пытаюсь построить калькулятор в C#. Теперь я хотел бы узнать, можно ли сделать расчет, который находится внутри текстового поля. Например, пользователь вводит текстовое поле (2*3)+6
. Теперь, как я могу сказать, что мой сценарий вычисляет это, а затем выводит результат?Как вычислить введенную пользователем строку в C#?
ответ
Вы можете использовать Compute метод:
using System;
using System.Data;
class Program
{
static void Main()
{
var result = new DataTable().Compute("(2*3)+6", null);
Console.WriteLine(result);
}
}
печатает:
12
Конечно, не ожидал, чтобы иметь возможность рассчитать любые сложные функции с помощью этого метода. Вы ограничены basic arithmetic.
И если вы хотите обрабатывать более сложные выражения, вы можете использовать CodeDOM.
+1 I не знал, что – Robbie
Это будет работать, но это не то, для чего предназначен DataTable. –
Не имеют опыта работы с этим методом, поэтому я могу быть здесь на тонком льду, но в документации указано «Параметр выражения требует агрегатной функции». - Так это действительно работает? –
Вы можете использовать System.Linq.Dynamic
библиотеку, чтобы сделать это:
`
static void Main(string[] args)
{
const string exp = "(A*B) + C";
var p0 = Expression.Parameter(typeof(int), "A");
var p1 = Expression.Parameter(typeof(int), "B");
var p2 = Expression.Parameter(typeof(int), "C");
var e = System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] { p0, p1, p2 }, typeof(int), exp);
var result = e.Compile().DynamicInvoke(2, 3, 6);
Console.WriteLine(result);
Console.ReadKey();
}
`
Вы можете загрузить копию этого here.
N.B. строка могла бы быть просто «(2 * 3) + 6», но этот метод имеет бонус, который вы можете передать в значения для уравнения.
- 1. Как отформатировать введенную пользователем строку?
- 2. как интерпретировать строку, введенную пользователем?
- 3. Сохраните введенную пользователем строку даты как datetime
- 4. Как я могу передать строку, введенную пользователем?
- 5. Как проверить строку, введенную пользователем? (Java)
- 6. сравнить введенную вручную строку с введенным пользователем
- 7. Меню ncurses - не отображает введенную пользователем строку
- 8. Представляя введенную пользователем строку по диагонали
- 9. Как добавить расширение файла .pdf в строку, введенную пользователем?
- 10. Mars mips, Как сохранить строку, введенную пользователем в два буфера?
- 11. Как получить введенную пользователем строку в виде массива отдельных символов?
- 12. iPhone: Как программно преобразовать строку, введенную пользователем в Шаблоны Init?
- 13. Как я могу попробовать TryParse() строку, введенную пользователем?
- 14. C# Как сохранить введенную пользователем фразу в массив строк?
- 15. Как вставить строку, введенную пользователем, чтобы направить ссылку?
- 16. Как взять введенную пользователем строку html и визуализацию на странице
- 17. Как проверить, содержит ли массив строку, введенную пользователем
- 18. Как получить введенную пользователем переменную в предложение?
- 19. Twig: Отправьте форму в путь, включая строку, введенную пользователем
- 20. Оцените модель, введенную пользователем как функцию python
- 21. Сравните входную строку, введенную пользователем с URL-адресом
- 22. Динамически выделить пользователя введенную строку
- 23. Удалить строку символов, введенную пользователем из файла ввода для чтения
- 24. Как остановить фильтрацию Twilio, введенную пользователем DTMF
- 25. Как найти сумму массивов, введенную пользователем?
- 26. Как сообщить длину строки, введенную пользователем
- 27. Получить URL строку введенную пользователем при использовании .htaccess
- 28. Как положить строку, введенную в массив символов в C++?
- 29. Как преобразовать введенную строку в список?
- 30. Передайте введенную пользователем переменную php перед POST?
Если вы хотите создать свое собственное решение с нуля, то посмотрите «Обозначение с обратной полярностью» –
Алгоритм шунтирующего двора, похоже, довольно распространен: http://en.wikipedia.org/wiki/Shunting-yard_algorithm – flai
около дюжины повторяющихся вопросов о SO. [1] (http://stackoverflow.com/questions/355062/is-there-a-string-math-evaluator-in-net) [2] (http://stackoverflow.com/questions/7727933/is- там-any-other-tools-like-ncalc-available-for-net-development) [3] (http://stackoverflow.com/questions/3972854/c-sharp-parse-math-expression) – CodesInChaos