最近兩天寫單元測試,碰到需要驗證乙個樹是否是期望的,但是樹這個結構要驗證起來還真是有點煩。。。
我的樹大概是這樣的:
1view codeclass treenode2
5public treenode(t value, ireadonlylist>children)610
public t value
11public ireadonlylist> children
12 }
為了判等,這個樹實現了iequatable>介面:
1view codepublic
override
bool equals(object
obj)28
return
equals(other);9}
1011
public
bool equals(treenodeother)
1215
16public
override
intgethashcode()
17
看著還不錯,不過由於t實際是個複雜型別,每次重寫equals也是個不輕鬆的事情,而且還要把整個期望的樹給構造出來,呵呵,還是煩啊。。。
但是,如果只需要判定個把簡單屬性,事情就方便了許多,所以,treenode需要乙個方法來轉換t的型別:
1view codepublic treenodeselect(funcselector)
2
看起來不錯,這樣就可以有這樣的code來玩轉tree了:
1 treenode inttree =...view code2 treenode stringtree = inttree.select(i => i.tostring());
等等,我們可以把這**寫的跟linq:
1 treenode inttree =...view code2 treenode stringtree = from i in
inttree
3select i.tostring();
測試**繼續啪啦啪啦的寫,唉,測試失敗了,什麼情況,仔細一看,哦,tree下面節點的順序錯了,而tree的equals方法要求順序,但是這個測試剛好不要求順序,於是我有了兩個選擇:
1. 改寫equals方法 (不想折騰集合操作)
2. 讓節點排序 (對測試用例而言,構建乙個有順序的樹可是很簡單的事情)
所以,我需要個orderby:
1view codepublic treenodeorderby(funckeyselector)
2
這下就可以隨便折騰這個樹了:
1 treenode inttree =...view code2 treenode stringtree = from i in
inttree
3 let m = i % 3
4order by m
5select i.tostring();
乙個簡單的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 執行...