سلام دوست من
با استفاده از کلاس ها و اشیای فضا نام CodeDom میشه یه کارهایی کرد من قبلا چندتا مثال توی تالار VB.net گزاشته بودم ، اینم هم به زبان C# شاید بتونه کمکتون کنه.
public object ProcessCommand(String command)
{
CSharpCodeProvider Provider = new CSharpCodeProvider();
CompilerParameters Parameters = new CompilerParameters();
CompilerResults Result;
String Source;
Parameters.GenerateExecutable = false;
Parameters.GenerateInMemory = true;
Parameters.ReferencedAssemblies.Add("System.dll");
Parameters.ReferencedAssemblies.Add("System.Window s.Forms.dll");
Source = "using System;" + Environment.NewLine +
"using System.Windows.Forms;" + Environment.NewLine +
"namespace ns {" + Environment.NewLine +
"public class Class1 {" + Environment.NewLine +
"public static object Evaluate(){" + Environment.NewLine +
"return " + command + Environment.NewLine +
"}" + Environment.NewLine +
"}" + Environment.NewLine +
"}";
Result = Provider.CompileAssemblyFromSource(Parameters, Source);
if (Result.Errors.Count > 0)
{
MessageBox.Show(Result .Errors [0].Line + " " + Result.Errors[0].ErrorText);
}
else
{
MethodInfo Info = Result.CompiledAssembly.GetType("ns.Class1").GetMe thod("Evaluate");
return ((object)Info.Invoke(null, null));
}
return null;
}
برای تستش میتونی این رو امتحان کنی :
int result = ((int)ProcessCommand("(5*6)*100-40;"));
MessageBox.Show(result .ToString ());
یا علی