在學習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 ...