C#?執(zhí)行Javascript腳本的方法步驟
前一陣子使用C#編寫SCXML狀態(tài)機(jī),需要解析EMCScript表達(dá)式,使用了Jint庫(kù)(https://github.com/sebastienros/jint/),當(dāng)時(shí)感覺(jué)與C#之間的數(shù)據(jù)轉(zhuǎn)換不是很方便。這兩天有時(shí)間又關(guān)注了一下,發(fā)現(xiàn)新的3.0版本有了很大改進(jìn),在這里介紹給大家,供參考。
首先要安裝nuget包,注意增加prerelease選項(xiàng),安裝最新的版本,使用dotnet命令行指令如下:
dotnet add ?package Jint --prerelease
直接計(jì)算表達(dá)式:
Console.WriteLine("直接計(jì)算表達(dá)式:(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);可以使用對(duì)象進(jìn)行C#和JS之間的數(shù)據(jù)交換:
var myobj= new Student {
Name="張三"
};
Console.WriteLine(myobj.Name);
var e4 = new Engine()
.SetValue("student", myobj)
.Execute("student.Name = '李四'");
Console.WriteLine(myobj.Name);
可以將C#函數(shù)委托給JS引擎,在JS代碼中調(diào)用這些函數(shù):
Console.Write("將CSharp函數(shù)設(shè)置給Js引擎");
var engine = new Engine()
.SetValue("log", new Action<object>(Console.WriteLine));
engine.Execute(@"
function hello() {
log('Hello World');
};
hello();
");也可以從CSharp 調(diào)用JS的函數(shù):
Console.WriteLine("調(diào)用JS函數(shù)計(jì)算BMI");
var e5=new Engine()
.Execute("function bmi(weight, height) { return weight/height/height; }");
Console.WriteLine(e5.Invoke("bmi",75,1.75));可以引入CLI,從而在JS引擎中調(diào)用CLI中的函數(shù):
Console.WriteLine("調(diào)用.Net函數(shù)寫入文件");
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項(xiàng)目中。
到此這篇關(guān)于C# 執(zhí)行Javascript腳本的方法步驟的文章就介紹到這了,更多相關(guān)C# 執(zhí)行Javascript腳本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#通過(guò)反射獲取當(dāng)前工程中所有窗體并打開(kāi)的方法
這篇文章主要介紹了C#通過(guò)反射獲取當(dāng)前工程中所有窗體并打開(kāi)的方法,涉及C#針對(duì)窗體的獲取與顯示等操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08
C# .NET實(shí)現(xiàn)掃描識(shí)別圖片中的文字
本文以C#及VB.NET代碼為例,介紹如何掃描并讀取圖片中的文字。文中的示例代碼介紹詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2021-12-12
C#中DataGridView導(dǎo)出Excel的兩種方法
這篇文章主要介紹了C#中DataGridView導(dǎo)出Excel的兩種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
詳解.NET 4.0中的泛型協(xié)變(covariant)和反變(contravariant)
這篇文章主要介紹了詳解.NET 4.0中的泛型協(xié)變(covariant)和反變(contravariant),本文講解了協(xié)變和反變的背景知識(shí)、.NET 4.0引入的泛型協(xié)變、反變性、協(xié)變和反變的相互作用等內(nèi)容,需要的朋友可以參考下2015-06-06
c#異步讀取數(shù)據(jù)庫(kù)與異步更新ui的代碼實(shí)現(xiàn)
這篇文章主要介紹了c#從數(shù)據(jù)庫(kù)里取得數(shù)據(jù)并異步更新ui的方法,大家參考使用吧2013-12-12
利用C#/VB.NET實(shí)現(xiàn)PPT轉(zhuǎn)換為HTML
利用PowerPoint可以很方便的呈現(xiàn)多媒體信息,且信息形式多媒體化,表現(xiàn)力強(qiáng)。但難免在某些情況下我們會(huì)需要將PowerPoint轉(zhuǎn)換為HTML格式,本文就為大家整理了轉(zhuǎn)換方法,希望對(duì)大家有所幫助2023-05-05
Unity3D動(dòng)態(tài)生成平面網(wǎng)格
這篇文章主要為大家詳細(xì)介紹了Unity3D動(dòng)態(tài)生成平面網(wǎng)格,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02
c#基礎(chǔ)系列之System.String的深入理解
這篇文章主要給大家介紹了關(guān)于c#基礎(chǔ)系列之System.String的深入理解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
C#實(shí)現(xiàn)微信公眾號(hào)群發(fā)消息(解決一天只能發(fā)一次的限制)實(shí)例分享
經(jīng)過(guò)幾天研究網(wǎng)上的代碼和謝燦大神的幫忙,今天終于用C#實(shí)現(xiàn)了微信公眾號(hào)群發(fā)消息,現(xiàn)在分享一下2013-09-09

