解析入口引數為實體的表示式樹

2021-09-06 02:39:42 字數 1865 閱讀 7204

在學習linq的時候碰到了解析表示式樹的問題,書上的例子中入口引數為乙個單一變數,這個在msdn中給出了示例**:

msdn官方示例:

//add the following using directive to your code file:

//using system.linq.expressions;

//create an expression tree.

expression

<

func

<

int,

bool

>>

exprtree

=num

=>

num

<5;

//decompose the expression tree.

parameterexpression param

=(parameterexpression)exprtree.parameters[0];

binaryexpression operation

=(binaryexpression)exprtree.body;

parameterexpression left

=(parameterexpression)operation.left;

constantexpression right

=(constantexpression)operation.right;

console.writeline(

"decomposed expression: => ",

param.name, left.name, operation.nodetype, right.value);

//this code produces the following output:

//decomposed expression: num => num lessthan 5

這裡表示式的入口引數是乙個int型的變數,表示式左邊就是這個引數本身,右邊是乙個常量,因此用

parameterexpression left

= (parameterexpression)operation.left;

constantexpression right

=(constantexpression)operation.right;

來解析即可,但如果入口是乙個實體呢,這種情況很常見,應該怎麼解析呢,通過向高人請教,最後用編譯表示式樹終於解決了這個問題:

//實體類

public

class

tpublic

string

name }//

解析表示式樹類

public

class

test

=>  ",

param.name,left.member.name,operation.nodetype,result.tostring());}}

//呼叫

public

class

program

;test.expressiontest(o 

=>

o.id 

==t.id);

test.expressiontest(o 

=>

o.name 

==t.name);            

console.read();}}

執行結果如下:

園子中有位朋友提供了另外一種方法(不過那個方法有一定缺陷,要依賴於實體型別,如果像上面**中那樣把表示式做為乙個引數就無能為力了。

正規表示式解析url引數

解析url引數正則 w s s 意思是 從?或 符號開始匹配之後的滿足 w s 的字串 但是不包含 1個到多個 s 匹配空格 號之前或者空格之前結束 正好專案中要用到 搗鼓了好久還是不會.最終放棄使用split分割的方式解析發現好落伍 public static namevaluecollectio...

表示式樹的建立

a b c d e 對該樹進行後序遍歷得到字尾表示式 ab cde 這裡實現的是如何根據乙個字尾表示式,構造出其相應的表示式樹。演算法思想 其實很簡單,主要就是棧的使用。演算法時間複雜度是o n n是字尾表示式長度。從前向後依次掃瞄字尾表示式,如果是運算元就建立乙個單節點樹,並把其指標壓入棧。如果是...

表示式樹的值

讀入表示式樹的先序遍歷字串,求其值。運算子只可能是加減乘除,保證輸入的每個子表示式樹的結果都是整數值且可以用c語言的int型別表達。輸入由多組測試資料組成。每組資料報含一行字串,即表示式樹的先序遍歷序列,字串長度大於0且不超過100。見樣例。13 5 9 13 5 9 13 5 9 58 13 5 ...