Pages

2014-11-12

如何圍浴巾(Bath Towel)?

最近別人送我一條浴巾,但總是圍不好,一下子就掉了。查了網上教學,一般人總是浴巾圍好後會包住尾端往內折(美觀習慣),但這樣很容易掉落。原來同樣的圍法但是包住尾端往外折一圈就不會掉了,如下圖帥男示範。若想要浴巾翻口美觀些,可以挪至腰後面再外翻一圈即可。

Bath Towel

2014-11-05

C# Script表達式執行運算

有些財務系統的計算方式,若能開放給User微調定義,可以增加很多彈性。透過C#的Reflection及Type機制,可以實作運算式的Eval()計算。眾多開源Lib控件裏,我覺得DynamicExpresso寫得最好,架構如下圖:

image

可惜它僅支援單一行的表達式Expression, 要實作邏輯if-else或區域變數的定義,就力有不逮了。後來改用CS-Script這套C# Script引擎,因為它的對象是整個Script,而非在單一表達式運算上,因此在變數定義沒有DynamicExpresso直覺,需要一些巧思才能實作成下圖的方式。

image

值得一提的是,這類使用Reflection及產生CodeDom的即時運算要注意其效能消耗。以CS-Script v3.8.10為例,初始化要700ms,載入Script並Compile編譯要80ms,應用在批次大量計算時,要特別注意寫法。