首页 / 知识
关于反射:如何动态评估C#表达式?
2023-04-14 19:34:00

How can I evaluate a C# expression dynamically?我想做相当于:
在Biri的链接之后,我得到了以下代码片段(已修改为删除过时的方法
旧话题,但是考虑到这是在谷歌搜索时显示的第一个线程,这是一个更新的解决方案。 您可以使用Roslyn的新脚本API评估表达式。
如果您使用的是NuGet,则只需向Microsoft.CodeAnalysis.CSharp.Scripting添加一个依赖项。
显然,这没有利用脚本引擎的异步功能。 您还可以根据需要指定评估结果类型:
要评估更多高级代码段,传递参数,提供引用,名称空间和其他内容,请查看上面链接的Wiki。 我已经编写了一个开源项目Dynamic Expresso,该项目可以将使用C#语法编写的文本表达式转换为委托(或表达式树)。无需使用编译或反射即可将文本表达式解析并转换为表达式树。 您可以这样写:
要么
我的工作基于Scott Gu的文章http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx。 如果您特别想在自己的项目中调用代码和程序集,则建议使用C#CodeDom CodeProvider。 这是我所知道的用于在C#中动态评估字符串表达式的最流行方法的列表。 微软解决方案
非Microsoft解决方案(不是说这有什么问题)
我们使用基于上述内容的系统,其中每个C#脚本都编译为内存中的程序集,并在单独的AppDomain中执行。还没有缓存系统,因此脚本每次运行时都会重新编译。我已经进行了一些简单的测试,并且非常简单的" Hello World"脚本在我的计算机上编译了大约0.7秒,包括从磁盘加载脚本。 0.7秒对于脚本系统来说可以,但是对于响应用户输入可能太慢,在这种情况下,像Flee这样的专用解析器/编译器可能更好。
虽然C#本机不支持Eval方法,但我有一个C#eval程序,它允许评估C#代码。它提供了在运行时评估C#代码的功能,并支持许多C#语句。实际上,此代码可在任何.NET项目中使用,但是仅限于使用C#语法。请查看我的网站http://csharp-eval.com,以获取更多详细信息。 看起来还有一种使用RegEx和XPathNavigator评估表达式的方法。我还没有机会对其进行测试,但是我有点喜欢它,因为它不需要在运行时编译代码或使用无法使用的库。 http://www.webtips.co.in/c/evaluate-function-in-c-net-as-eval-function-in-javascript.aspx 我会尝试一下,然后告诉它是否有效。我也打算在Silverlight中尝试它,但是为时已晚,现在我几乎睡着了。 |
最新内容
相关内容
linux重新链接库命令?
linux重新链接库命令?,代码,软件,平台,产品,电脑,系统,入口,市场,工业,通信,linux下金仓数据库重启命令1、进入开始菜单-金仓数据库KingbaseESlinux链接远程命令?
linux链接远程命令?,系统,地址,网络,密码,软件,名称,工具,服务,电脑,认证,如何远程连接linux服务器步骤一:登录Linux服务器。打开Xshell,新建会linux查看动态命令?
linux查看动态命令?,系统,状态,工具,实时,时间,命令,工作,信息,地址,百分比,linux怎样使用top命令查看系统状态1、t:切换显示进程和CPU状态信息linux命令行链接网络?
linux命令行链接网络?,网络,系统,地址,工作,工具,最新,网址,数据,信息,环境,linux怎么配置网络连接Linux 系统中,可以通过以下几种方法配置网络linux动态链接库命令?
linux动态链接库命令?,代码,项目,工程,电脑,网上,文件,程序,静态,命令,目录,如何在linux下写动态链接库并卖给别人1、执行qmake main.pro生成mlinux动态执行命令?
linux动态执行命令?,时间,信息,名字,工作,网上,业务,工具,对比,地址,下来,如何在linux下让一个命令一直运行,然后跟踪结果日志1、编写一个shellinux取消链接命令行?
linux取消链接命令行?,工具,状态,环境,数据,命令,文件,终端,模式,指令,界面,linux怎么退出命令行1、先按ESC进入Command模式,然后输入“:wq”,回linux删除硬链接命令?
linux删除硬链接命令?,工作,数据,系统,信息,链接,命令,设备,名称,不了,概念,linux怎么备份删除bin下的.sh命令1、dump命令 Linux dump命令用于linux创建软链接命令?
linux创建软链接命令?,工作,地址,位置,系统,信息,管理,服务,名字,链接,文件,如何在linux下创建硬链接软链接首先要弄清楚,在Linux系统中,内核为linux命令行动态输出?
linux命令行动态输出?,标准,工作,信息,系统,命令,地址,文件,数据,管理,设备,linux命令输出到屏幕的同时保存到文件su -c command output.txtlinux命令正则表达式?
linux命令正则表达式?,工作,环境,基础,网络,单位,名称,平台,信息,正规,管理,Linux正则表达式正则表达式基本上是一种表示法,只要程序支持这种表linux中软链接命令?
linux中软链接命令?,位置,设备,数据,信息,系统,文件,链接,地址,对比,源文件,Linux中文件与目录对应的硬链接与软链接方式总结1、软链接可以理