实例介绍
Dynamic Expresso 是一个用于解释简单 C# 语句的解释器,支持 .NET Core 3.1、.NET Core 5.0 及以上版本、.NET 4.6.2。
Dynamic Expresso 嵌入了自己的解析逻辑,通过将 C# 语句转换为 .NET lambda 表达式或委托来真正解释 C# 语句。
使用 Dynamic Expresso,开发人员可以创建可编写脚本的应用程序、在不进行编译的情况下执行 .NET 代码或创建动态 LINQ 语句。
语句使用 C# 语言规范的子集编写。全局变量或参数可以被注入并在表达式中使用。它不生成程序集,而是在运行时创建表达式树。
例如,您可以评估数学表达式:
var interpreter = new Interpreter();
var result = interpreter.Eval("8 / 2 + 2");
或解析带有变量或参数的表达式并多次调用它:
var interpreter = new Interpreter().SetVariable("service", new ServiceExample());
string expression = "x > 4 ? service.OneMethod() : service.AnotherMethod()";
Lambda parsedExpression = interpreter.Parse(expression, new Parameter("x", typeof(int)));
var result = parsedExpression.Invoke(5);
【实例截图】
【核心代码】
文件清单
└── DynamicExpresso-f966f84f6d9fbe809801940896d65534c5336906
├── CODEOWNERS
├── docs
│ └── workflow.png
├── DynamicExpresso.sln
├── DynamicExpressoWebShell.sln
├── LICENSE
├── README.md
├── sample
│ └── DynamicExpressoWebShell
│ ├── appsettings.Development.json
│ ├── appsettings.json
│ ├── Controllers
│ │ ├── HomeController.cs
│ │ └── InterpreterController.cs
│ ├── DynamicExpressoWebShell.csproj
│ ├── Models
│ │ └── ErrorViewModel.cs
│ ├── Program.cs
│ ├── Properties
│ │ ├── launchSettings.json
│ │ └── PublishProfiles
│ │ └── dynamic-expresso - Web Deploy.pubxml
│ ├── Services
│ │ ├── CommandsHistory.cs
│ │ └── WebShell.cs
│ ├── Startup.cs
│ ├── Views
│ │ ├── Home
│ │ │ └── Index.cshtml
│ │ └── Shared
│ │ └── Error.cshtml
│ └── wwwroot
│ ├── Content
│ │ ├── bootstrap.css
│ │ ├── bootstrap.min.css
│ │ ├── bootstrap-responsive.css
│ │ ├── bootstrap-responsive.min.css
│ │ ├── images
│ │ │ ├── glyphicons-halflings.png
│ │ │ └── glyphicons-halflings-white.png
│ │ └── webshell.css
│ └── Scripts
│ ├── bootstrap.js
│ ├── bootstrap.min.js
│ ├── jquery-1.9.0.intellisense.js
│ ├── jquery-1.9.0.js
│ ├── jquery-1.9.0.min.js
│ ├── jquery-1.9.0.min.map
│ └── webshell.js
├── src
│ ├── DynamicExpresso.Core
│ │ ├── AssignmentOperators.cs
│ │ ├── DefaultNumberType.cs
│ │ ├── Detector.cs
│ │ ├── DynamicExpresso.Core.csproj
│ │ ├── Exceptions
│ │ │ ├── AssignmentOperatorDisabledException.cs
│ │ │ ├── DuplicateParameterException.cs
│ │ │ ├── DynamicExpressoException.cs
│ │ │ ├── NoApplicableMethodException.cs
│ │ │ ├── ParseException.cs
│ │ │ ├── ReflectionNotAllowedException.cs
│ │ │ └── UnknownIdentifierException.cs
│ │ ├── Identifier.cs
│ │ ├── IdentifiersInfo.cs
│ │ ├── Interpreter.cs
│ │ ├── InterpreterOptions.cs
│ │ ├── Lambda.cs
│ │ ├── LanguageConstants.cs
│ │ ├── Parameter.cs
│ │ ├── ParserArguments.cs
│ │ ├── Parsing
│ │ │ ├── ParserConstants.cs
│ │ │ ├── Parser.cs
│ │ │ ├── ParserSettings.cs
│ │ │ ├── ParseSignatures.cs
│ │ │ ├── Token.cs
│ │ │ └── TokenId.cs
│ │ ├── ReferenceType.cs
│ │ ├── Reflection
│ │ │ └── ReflectionExtensions.cs
│ │ ├── Resources
│ │ │ ├── ErrorMessages.Designer.cs
│ │ │ └── ErrorMessages.resx
│ │ └── Visitors
│ │ └── DisableReflectionVisitor.cs
│ └── GlobalAssemblyInfo.cs
└── test
└── DynamicExpresso.UnitTest
├── CaseInsensitivePropertyTest.cs
├── CollectionHelperTests.cs
├── ConstructorTest.cs
├── DefaultOperatorTest.cs
├── DetectIdentifiersTest.cs
├── DynamicExpresso.UnitTest.csproj
├── DynamicTest.cs
├── EnumerableTest.cs
├── ExpressionTypeTest.cs
├── ExtensionsMethodsTest.cs
├── FunctionTest.cs
├── GenerateDelegatesTest.cs
├── GenerateLambdaTest.cs
├── GithubIssues.cs
├── IdentifiersTest.cs
├── InvalidExpressionTest.cs
├── LambdaExpressionTest.cs
├── LiteralsTest.cs
├── MemberInvocationTest.cs
├── NullableTest.cs
├── OperatorsTest.cs
├── OtherTests.cs
├── ParametersTest.cs
├── PerformanceTest.cs
├── ReferencedTypesPropertyTest.cs
├── StaticTest.cs
├── TypesTest.cs
├── VariablesTest.cs
├── VisitorsTest.cs
└── WorkingContextTest.cs
25 directories, 95 files
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论