国产探花免费观看_亚洲丰满少妇自慰呻吟_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。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 三江| 木里| 台北县| 郧西县| 泾川县| 措美县| 交口县| 襄城县| 石首市| 新余市| 隆化县| 大宁县| 普兰店市| 长丰县| 萝北县| 伊春市| 尼玛县| 日土县| 轮台县| 确山县| 崇明县| 策勒县| 十堰市| 宜州市| 商都县| 云梦县| 花莲市| 芜湖市| 上栗县| 封开县| 蓝田县| 德昌县| 奈曼旗| 徐水县| 东丰县| 沙雅县| 望奎县| 德庆县| 浪卡子县| 呼伦贝尔市| 太仆寺旗|