C#怎样把一个字符串当成一个代码执行 例如 string str="a==b"; 我要执行的语句是if (a==b)就是把字符串转化成代码~! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个是没有办法喽,除非你的。NET是4.0才可以 不过,动态编译应该是可以解决你的问题看一下这个文章http://blog.csdn.net/Linux7985/archive/2010/06/24/5690532.aspx 调用c# 编译器 就可以了相应的还有vb 编译器 等等。还有一种方法是 使用sql 的 动态功能把要执行的功能拼接成sql字符串 使用 executesql 存储过程来实现 你需要的是一种能解析的脚本语言。Lua可以配合.Net使用。能完全满足你的要求! 前面说了用codedom,差不多和我们写的代码变成可执行程序的过程一样。但是代码必须是完整的。例如 string str="class a ( static main(){ if (1=1) console.Print("hello world."); })"; C#动态编译、执行代码:http://blog.csdn.net/xufei96/archive/2010/01/07/5152787.aspx另一个选择是使用动态语言,如ironpython等 楼主要的就是eval函数的功能,这个动态语言才有 如果有需要.我可以帮你写个Lua结合.Net的例子。不止能判断 or and这样的条件,还能执行你想执行的操作。 我以前用的,一个是动态编译,一个是利用Dataset的Express表达式,但仅仅支持sql表达式 public class MyEval { public static object Eval(string expression) { //创建编译器 ICodeCompiler comp = new CSharpCodeProvider().CreateCompiler(); CompilerParameters paramerts = new CompilerParameters(); //设置源代码 StringBuilder objBuild = new StringBuilder(); objBuild.Append("using System; \n"); objBuild.Append("namespace Aptech.Showlin._temp { \n"); objBuild.Append(" public class _evalTemp { \n"); objBuild.Append(" public object _get() "); objBuild.Append("{ "); objBuild.AppendFormat(" return ({0}); ", expression); objBuild.Append("}\n"); objBuild.Append("} }"); //动态编译 CompilerResults cr = comp.CompileAssemblyFromSource(paramerts, objBuild.ToString()); System.Reflection.Assembly objAss = cr.CompiledAssembly; object o=objAss.CreateInstance("Aptech.Showlin._temp._evalTemp"); System.Reflection.MethodInfo mi = o.GetType().GetMethod("_get"); return mi.Invoke(o, null); } public static object EvalSql(string expression) { System.Data.DataTable dt = new System.Data.DataTable(); System.Data.DataColumn dc = new System.Data.DataColumn("temp", typeof(string), expression); dt.Columns.Add(dc); dt.Rows.Add(dt.NewRow()); return dt.Rows[0][0]; } } 在神不知鬼不觉的情况下,把WebBrowse引入来。等到月黑风高的晚上,把 a=b 转化成 js 代码。问题转移到了 js 与 webBrowse上了,楼主看着办吧 把字母的位置取出来然后再转换成int型应该可以吧 我听说过CodeDom是可以的,但没实际用过。 哈哈,楼主是想用在linq的动态多条件查询上吧?如果这样我倒有妙招,不用using System.Linq.Dynamic;或using System.Linq.Expressions;也不用伪linq : LQDC.ExecuteQuery("select * from table where item like %ak47%"); 代码通俗易懂就好了,不要搞得花里胡哨的用三元运算符就可以了——优雅何必搞什么boole boo = 1 == 1 && 2 == 2什么的。自己写个词法分析器或者语法分析器类似的接口得了 没遇到过要是实在要用的话用str.substring(0);呵 条件查询 请教翻译一个VB的语句 如何动态的把数据库的图片添加到 ImageList 请问 求助:C#对WORD文档的问题!! 高分急求二进制数据数据库存储问题 超难绘图问题,高手、有经验者来帮帮忙!!! TotalGridView_RowDataBound获取其中行的控件ID(读不到) VS.NET中"类库"和"组件类"有什么区别? C#精髓也没想象中那么好 求一个2D游戏引擎..... 还是SQL文件下载问题
http://blog.csdn.net/Linux7985/archive/2010/06/24/5690532.aspx
相应的还有vb 编译器 等等。
还有一种方法是 使用sql 的 动态功能
把要执行的功能拼接成sql字符串
使用 executesql 存储过程来实现
例如 string str="class a ( static main(){ if (1=1) console.Print("hello world."); })";
C#动态编译、执行代码:http://blog.csdn.net/xufei96/archive/2010/01/07/5152787.aspx另一个选择是使用动态语言,如ironpython等
{
public static object Eval(string expression)
{
//创建编译器
ICodeCompiler comp = new CSharpCodeProvider().CreateCompiler();
CompilerParameters paramerts = new CompilerParameters(); //设置源代码
StringBuilder objBuild = new StringBuilder();
objBuild.Append("using System; \n");
objBuild.Append("namespace Aptech.Showlin._temp { \n");
objBuild.Append(" public class _evalTemp { \n");
objBuild.Append(" public object _get() ");
objBuild.Append("{ ");
objBuild.AppendFormat(" return ({0}); ", expression);
objBuild.Append("}\n");
objBuild.Append("} }"); //动态编译
CompilerResults cr = comp.CompileAssemblyFromSource(paramerts, objBuild.ToString()); System.Reflection.Assembly objAss = cr.CompiledAssembly;
object o=objAss.CreateInstance("Aptech.Showlin._temp._evalTemp");
System.Reflection.MethodInfo mi = o.GetType().GetMethod("_get");
return mi.Invoke(o, null);
} public static object EvalSql(string expression)
{
System.Data.DataTable dt = new System.Data.DataTable();
System.Data.DataColumn dc = new System.Data.DataColumn("temp", typeof(string), expression);
dt.Columns.Add(dc);
dt.Rows.Add(dt.NewRow());
return dt.Rows[0][0];
}
}
等到月黑风高的晚上,把 a=b 转化成 js 代码。
问题转移到了 js 与 webBrowse上了,楼主看着办吧
using System.Linq.Dynamic;
或
using System.Linq.Expressions;
也不用伪linq : LQDC.ExecuteQuery("select * from table where item like %ak47%");
用三元运算符就可以了——优雅
何必搞什么boole boo = 1 == 1 && 2 == 2什么的。
自己写个词法分析器或者语法分析器类似的接口得了