C 動態編譯計算表示式的值

2022-01-13 16:02:14 字數 2299 閱讀 9746

c#動態編譯計算表示式的值,是通過system.codedom.compiler命名空間下的相關類來實現的。其步驟大致為:

1.將表示式包裝成為可編譯的c#**

2.使用反射呼叫上一步編譯的**。

示例如下:在介面上放乙個textbox,用來輸入表示式;放乙個按鈕,用來相應使用者點選,以進行表示式的計算;在另外乙個textbox中顯示計算結果。對應的xaml**如下:

<

window

x:class

="samplecodedemo.mainwindow"

xmlns

=""xmlns:x

=""title

="mainwindow"

height

="403"

width

="663"

loaded

="window_loaded"

>

<

grid

>

<

textbox

height

="87"

horizontalalignment

="left"

margin

="12,12,0,0"

name

="txtexpression"

verticalalignment

="top"

width

="617"

="wrap"

/>

<

button

content

="計算"

height

="23"

horizontalalignment

="left"

margin

="554,114,0,0"

name

="btncalculate"

verticalalignment

="top"

width

="75"

click

="btncalculate_click"

/>

<

textbox

height

="48"

horizontalalignment

="left"

margin

="12,157,0,0"

name

="txtresult"

verticalalignment

="top"

width

="617"

isenabled

="false"

="wrap"

/>

grid

>

window

>

在後台**中,首先新增一下引用:

using

microsoft.csharp;

using

system.codedom.compiler;

using system.reflection;

剩餘的**如下:

private

void window_loaded(object

sender, routedeventargs e)

private

void btncalculate_click(object

sender, routedeventargs e)

catch

(exception ex)

}private

object compliercode(string

expression)

private

string wrapexpression(string

expression)

"");

public static datetime end_dt = convert.todatetime("""");

public static datetime current_dt = datetime.now;

public static object calculate();}

}";

return code.replace("

", expression);

}

簡單的說明一下,wrapexpression方法用來包裝表示式,使其可以被**編譯器編譯通過。compliercode方法用來編譯,並通過反射執行**。其它是兩個事件的處理方法,無需多說。

在上面的示例中可以實現動態計算符合c#語法的數學表示式計算。

計算表示式值

試題描述 字尾表示式是指運算子放在兩個運算物件之後,所有計算按運算子出現的順序,嚴格地從左到右進行。注意每個運算元之後都緊跟著乙個 如 3 5 2 7對應的字尾表示式為3.5.2.7.輸入乙個字尾表示式,求表示式的值。注意本題中只出現 三種運算子。輸入一行,乙個字尾表示式。輸出一行,乙個整數,表示字...

計算表示式值(字尾表示式) 棧

處理表示式主要是對優先順序以及括號的判斷 1.運算子棧頂的優先順序小於加入的時,需要將所有的不評級的取出並計算,2.當遇到 時,需要括號內的運算全部處理 2.其他情況全部加入運算子棧和資料棧 include include include using namespace std typedef lo...

計算該表示式值

問題描述 輸入乙個只包含個位數字的簡單四則運算表示式字串,計算該表示式的值注 1 表示式只含 四則運算符,不含括號 2 表示式數值只包含個位整數 0 9 且不會出現0作為除數的情況 3 要考慮加減乘除按通常四則運算規定的計算優先順序 4 除法用整數除法,即僅保留除法運算結果的整數部分。比如8 3 2...