Преобразования текста в команду - C#
Формулировка задачи:
Здравствуйте. Есть ли способ преобразовать текст, введенный в textBox, в команду? Например, textBox содержит "Math.Sin(2)", а при нажатии на кнопку должны получить синус двойки. Или в textBox будет this.close() - форма закрывается.
Можно ли преобразовать текст в команду?
Решение задачи: «Преобразования текста в команду»
textual
Листинг программы
using System;
using System.CodeDom.Compiler;
using System.Windows.Forms;
using Microsoft.CSharp;
namespace WindowsFormsApplication280
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var tb = new TextBox {Parent = this, Dock = DockStyle.Top};
tb.KeyPress += (o, e) =>
{
if (e.KeyChar == '\r')
{
var res = new ExpressionCalcualtor().Calculate(tb.Text);
tb.Text = res.ToString();
}
};
}
}
class ExpressionCalcualtor
{
public double Calculate(string expression)
{
string source =
@"
using System;
public static class Calculator
{
public static double Calc()
{
return %expression%;
}
}".Replace("%expression%", expression);
// Настройки компиляции
var compilerParams = new CompilerParameters {GenerateInMemory = true};
// Компиляция
var results = new CSharpCodeProvider().CompileAssemblyFromSource(compilerParams, source);
//обработка ошибок
if(results.Errors.Count > 0)
throw new Exception(results.Errors[0].ErrorText);
//вычисляем
var calculator = results.CompiledAssembly.GetType("Calculator");
var res = (double)calculator.GetMethod("Calc").Invoke(null, new object[0]);
return res;
}
}
}