110,009
社区成员




//比如我从文本文件读出一个串
string cmd= @"string[] flis = { ""类别"", ""供应商"", ""单位"" }";
//想变成这样执行
string[] flis = { "类别", "供应商", "单位" };
//在其他语言叫宏替换吧,好像C#不能这样,有没有变通的方法?
var i=2;
eval("i*=4;");
alert(i); //i==8
private void button2_Click(object sender, EventArgs e)
{
Microsoft.JScript.Vsa.VsaEngine eng = Microsoft.JScript.Vsa.VsaEngine.CreateEngine();
int n = (int)Microsoft.JScript.Eval.JScriptEvaluate("var i=2; i*4+7", eng);
MessageBox.Show(n.ToString()); //n==15
}
using System;
using System.Text;
using System.CodeDom.Compiler;
using System.Reflection;
using System.IO;
using Microsoft.CSharp;
命名空间的具体意义就不说了,下面看看代码,为了可以让我们的工程可以重复使用我们新建一个类库工程名叫:CoustomEval其中有一个类是用来计算某一断字符串的值。详细代码如下所示:
namespace CoustomEval{
///
/// Summary description for Class1.
///
public class MyEval{
public MyEval(){
//
// TODO: Add constrUCtor logic here
//
}
public object Eval(string cCharpCode){
CSharpCodeProvider csharpCodeProvider = new CSharpCodeProvider();
ICodeCompiler compiler = csharpCodeProvider.CreateCompiler();
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("system.dll");
cp.CompilerOptions = "/t:library";
cp.GenerateInMemory = true;
StringBuilder myCode = new StringBuilder();
myCode.Append("using System;");
myCode.Append("namespace CoustomEval{");
myCode.Append("class myLib {private "+cCharpCode+" public int myMethod(){return i;}}");
myCode.Append("}");
CompilerResults cr = compiler.CompileAssemblyFromSource(cp,myCode.ToString());
Assembly assembly = cr.CompiledAssembly;
object tmp = assembly.CreateInstance("CoustomEval.myLib");
Type type = tmp.GetType();
MethodInfo mi = type.GetMethod("myMethod");
object result = mi.Invoke(tmp,null);
return result;
}
}
}