乙個簡單的Linq to TreeNode

2021-09-08 17:23:31 字數 1645 閱讀 7725

最近兩天寫單元測試,碰到需要驗證乙個樹是否是期望的,但是樹這個結構要驗證起來還真是有點煩。。。

我的樹大概是這樣的:

1

class treenode2

5public treenode(t value, ireadonlylist>children)610

public t value

11public ireadonlylist> children

12 }

view code

為了判等,這個樹實現了iequatable>介面:

1

public

override

bool equals(object

obj)28

return

equals(other);9}

1011

public

bool equals(treenodeother)

1215

16public

override

intgethashcode()

17

view code

看著還不錯,不過由於t實際是個複雜型別,每次重寫equals也是個不輕鬆的事情,而且還要把整個期望的樹給構造出來,呵呵,還是煩啊。。。

但是,如果只需要判定個把簡單屬性,事情就方便了許多,所以,treenode需要乙個方法來轉換t的型別:

1

public treenodeselect(funcselector)

2

view code

看起來不錯,這樣就可以有這樣的code來玩轉tree了:

1 treenode inttree =...

2 treenode stringtree = inttree.select(i => i.tostring());

view code

等等,我們可以把這**寫的跟linq:

1 treenode inttree =...

2 treenode stringtree = from i in

inttree

3select i.tostring();

view code

測試**繼續啪啦啪啦的寫,唉,測試失敗了,什麼情況,仔細一看,哦,tree下面節點的順序錯了,而tree的equals方法要求順序,但是這個測試剛好不要求順序,於是我有了兩個選擇:

1. 改寫equals方法 (不想折騰集合操作)

2. 讓節點排序 (對測試用例而言,構建乙個有順序的樹可是很簡單的事情)

所以,我需要個orderby:

1

public treenodeorderby(funckeyselector)

2

view code

這下就可以隨便折騰這個樹了:

1 treenode inttree =...

2 treenode stringtree = from i in

inttree

3 let m = i % 3

4order by m

5select i.tostring();

view code

乙個簡單的verlig程式 乙個簡單C程式的介紹

我們前面學了c語言的一些理論知識,今天通過乙個簡單的程式先來看一看c語言程式是什麼樣子。然後再對程式中的 進行介紹。這個語句的功能是進行有關的預處理操作。include稱為檔案包含命令,後面尖括號的內容稱為標頭檔案或首檔案。此處指包含stdio.h系統標頭檔案,在下面主函式中使用的printf 函式...

乙個簡單的Timer

關於system pause 的作用是暫停一下程式,等待按回車鍵繼續執行下一語句,類似getchar 的作用,不改變程式流程 system是呼叫dos的命令列,你還可以呼叫其他的命令,比如 system md d wang 這就是呼叫dos命令中的md命令,在d盤的根目錄下建立乙個資料夾,名字為wa...

乙個簡單的job Oracle

以前總在想 如果能讓 資料庫 自己在某種特定的條件下 比如時間這種特定的條件下 自己執行一些事務,比如在夜裡12 00執行資料備份,定期向表中插入一些資料.這時選擇 job 來實現以上的一些功能就是乙個不錯的選擇 下面是我寫的乙個最簡單的 job 例子,大家有什麼好方法也可以寫出來 這個job 執行...