網站首頁 前端文檔 正文
前一陣子使用C#編寫SCXML狀態機,需要解析EMCScript表達式,使用了Jint庫(https://github.com/sebastienros/jint/),當時感覺與C#之間的數據轉換不是很方便。這兩天有時間又關注了一下,發現新的3.0版本有了很大改進,在這里介紹給大家,供參考。
首先要安裝nuget包,注意增加prerelease選項,安裝最新的版本,使用dotnet命令行指令如下:
dotnet add ?package Jint --prerelease
直接計算表達式:
Console.WriteLine("直接計算表達式:(1+2)*3"); var r1= e.Evaluate("(1+2)*3"); Console.WriteLine(r1);
字符串操作:
Console.WriteLine("字符串操作:'abc'.length"); var r2=e.Evaluate("'abc'.length"); Console.WriteLine(r2); Console.WriteLine("-----------------------"); Console.WriteLine("字符串操作:'abc'.substr(2)"); var r3=e.Evaluate("'abc'.substr(2)"); Console.WriteLine(r3);
可以使用SetValue給JS變量賦值:
var e2 = new Engine() .SetValue("x", 1) .SetValue("y",2); var r4=e2.Evaluate("x+y"); Console.WriteLine(r4);
可以使用對象進行C#和JS之間的數據交換:
var myobj= new Student { Name="張三" }; Console.WriteLine(myobj.Name); var e4 = new Engine() .SetValue("student", myobj) .Execute("student.Name = '李四'"); Console.WriteLine(myobj.Name);
可以將C#函數委托給JS引擎,在JS代碼中調用這些函數:
Console.Write("將CSharp函數設置給Js引擎"); var engine = new Engine() .SetValue("log", new Action<object>(Console.WriteLine)); engine.Execute(@" function hello() { log('Hello World'); }; hello(); ");
也可以從CSharp 調用JS的函數:
Console.WriteLine("調用JS函數計算BMI"); var e5=new Engine() .Execute("function bmi(weight, height) { return weight/height/height; }"); Console.WriteLine(e5.Invoke("bmi",75,1.75));
可以引入CLI,從而在JS引擎中調用CLI中的函數:
Console.WriteLine("調用.Net函數寫入文件"); var e6 = new Engine(cfg => cfg.AllowClr()); e6.Execute(@"var f=System.IO.StreamWriter('sayhello.log'); f.WriteLine('你好 !'); f.Dispose();");
示例可以從github下載:https://github.com/zhenl/CSharpScriptDemo,本文示例在JSInCSharp項目中。
原文鏈接:https://www.cnblogs.com/zhenl/p/15756305.html
相關推薦
- 2022-09-08 Go語言中的閉包詳解_Golang
- 2022-10-11 MybatisPlus的UpdateWrapper和QueryWrapper的區別
- 2022-06-12 使用?Docker安裝?Zabbix并配置自定義監控項的過程詳解_docker
- 2023-02-26 C++?ROS與boost:bind()使用詳解_C 語言
- 2022-08-30 關于Flask高級_內置信號的介紹和兩個小實例
- 2022-07-02 Prometheus+Grafana監控Docker容器和Linux主機
- 2022-08-18 C++詳解實現Stack方法_C 語言
- 2022-10-29 線性回歸(基于python的理論與實現)的RuntimeWaring溢出問題
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支