PDA

View Full Version : سوال: کمک در مورد اجرای یک کد بصورت String - کامپایل یه کد توی برنامه



Hadi-Hashemi
جمعه 14 آذر 1393, 14:10 عصر
سلام دوستان

من یه برنامه ای نوشتم( البته کد رو از جایی پیدا کرده و تغییرش دادم ), به این صورت که توی #C یک کد #C رو اجرا میکنه.

اینم کدش:




using Microsoft.CSharp;
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace Test
{
class Program
{
static void Main(string[] args)
{
CSharpCodeProvider compiler = new CSharpCodeProvider();
CompilerParameters cp = new CompilerParameters();
cp.GenerateExecutable = false;
cp.GenerateInMemory = true;
cp.ReferencedAssemblies.Add("System.dll");

string code = @"
using System;
class Test
{
public void Hadi()
{
int a = 5 + ( ( 1 + 2 ) * 4 ) -3;
Console.WriteLine(a);
}
}
";

var results = compiler.CompileAssemblyFromSource(cp, new string[] { code });
if (results.Errors.Count == 0)
{
var test = results.CompiledAssembly.CreateInstance("Test");
test.GetType().
GetMethod("Hadi").
Invoke(test, null);
}
Console.ReadLine();
}
}
}



این برنامه, برنامه نوشته شده زیر رو که تو برنامه بالایی نوشتم رو اجرا میکنه:




using System;
class Test
{
public void Hadi()
{
int a = 5 + ( ( 1 + 2 ) * 4 ) -3;
Console.WriteLine(a);
}
}




برنامه به درستی کد بالایی رو اجرا میکنه و عدد 14 رو نشون میده. تا اینجا درست ولی من میخوام نتیجه برنامه بالایی که 14 هست رو بهم بده تا روش کار کنم.

ولی نتونستم بدستش بیارم. بجای Void از int استفاده کردم و با دستور return a خواستم نتیجه رو برگردونم نشد. یعنی نفهمیدم کجا برمیگردونه که برم برش دارم.

اگه ممکنه کمکم کنین.

Hadi-Hashemi
جمعه 14 آذر 1393, 15:00 عصر
یا اصلا مشکلمو اینطوری مطرح کنم:

حاصل عبارت "5 + ( ( 1 + 2 ) * 4 ) - 3" رو چطوری میتونم بدون دردسر حساب کنم؟

عبارت بصورت String هستش.