国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

如何在C#里面象js一樣可以直接計算字符串的值

2024-07-21 02:19:10
字體:
來源:轉載
供稿:網友

今天在論壇里面逛發現一個問題比較典型,我們在使用js的時候可以直接使用eval得到某一個表達式的值,在c#里面可以嗎?答案是肯定的,在.net提供的豐富的類庫里面這是可以實現的,但是沒有js那么簡單下面我將使用一個簡單的例子來說明利用編譯器和反射得到一個字符串表達式的值。我們建立一個windows窗體里面有如下的方法:

引用一下命名空間:

using system;

using system.text;

using system.codedom.compiler;

using system.reflection;

using system.io;

using microsoft.csharp;

命名空間的具體意義就不說了,下面看看代碼,為了可以讓我們的工程可以重復使用我們新建一個類庫工程名叫:coustomeval其中有一個類是用來計算某一斷字符串的值。詳細代碼如下所示:

namespace coustomeval{

///

/// summary description for class1.

///

public class myeval{

public myeval(){

//

// todo: add constructor logic here

//

}

public object eval(string ccharpcode){

csharpcodeprovider csharpcodeprovider = new csharpcodeprovider();

icodecompiler compiler = csharpcodeprovider.createcompiler();

compilerparameters cp = new compilerparameters();

cp.referencedassemblies.add("system.dll");

cp.compileroptions = "/t:library";

cp.generateinmemory = true;

stringbuilder mycode = new stringbuilder();

mycode.append("using system;");

mycode.append("namespace coustomeval{");

mycode.append("class mylib {private "+ccharpcode+" public int mymethod(){return i;}}");

mycode.append("}");

compilerresults cr = compiler.compileassemblyfromsource(cp,mycode.tostring());

assembly assembly = cr.compiledassembly;

object tmp = assembly.createinstance("coustomeval.mylib");

type type = tmp.gettype();

methodinfo mi = type.getmethod("mymethod");

object result = mi.invoke(tmp,null);

return result;

}

}

}



上面的類庫只具有一般代表性不具備一般使用性,重要的是提供一種方法來實現它,所以我在里面使用了硬編碼的方式,如果你喜歡可以使用其他的方式,包括讀文件,讀數據庫取得代碼段等等。然后我們在建立一個測試工程,該工程里面有一個測試窗體,該窗體上有一個按鈕和兩個文本框,其中一個文文本框用來輸入要計算的值,另一個顯示計算的結果,詳細代碼如下:

private void button1_click(object sender, system.eventargs e) {

myeval eval = new myeval();

object result = eval.eval(this.textbox1.text);

this.textbox2.text = result.tostring();

}

在這個工程中需要引用上面的工程,這樣我們就可以使用myeval類來實現計算textbox1里面的值了,最后可以將值顯示在textbox2里面,代碼運行的結果我在這里就不帖了。只給出我的測試結果,由于該問題源于論壇所以我就是用論壇中原來的測試要求。

測試結果:在textbox中輸入int i = 10;點擊button1以后將會在textbox2中顯示出10。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武强县| 含山县| 句容市| 卫辉市| 鄂州市| 屏东县| 信宜市| 屯留县| 白沙| 永昌县| 沂源县| 长春市| 博湖县| 徐汇区| 博乐市| 南郑县| 怀柔区| 丹江口市| 多伦县| 阿拉善右旗| 平泉县| 德保县| 修文县| 清流县| 米易县| 樟树市| 汝城县| 牡丹江市| 莒南县| 大兴区| 通许县| 恩平市| 益阳市| 汉源县| 田阳县| 绥中县| 宜都市| 大石桥市| 浦北县| 闵行区| 秭归县|