標籤:

造輪子進度(2017.07.26)

最近是多項工作並行,簡直是累啊orz

SQLite Data Provider

目前這個訪問 SQLite 資料庫的工具已經可以支持自定義類型啦。廢話不多說,直接上示例:

假設有一列是存儲日期,但因為 SQLite 本身不支持,於是可以註冊一下日期類型。這裡設定對於原生的整數和字元串類型的轉換——整數是按 Unix 時間戳;字元串則是按默認格式的日期時間字元串

SQLiteDatabase.RegisterDatatype<DateTimeOffset>(value =>n{n switch (value.Type)n {n case SQLiteDatatype.Integer:n return DateTimeOffset.FromUnixTimeSeconds(value.Get<long>());nn case SQLiteDatatype.Text:n return DateTimeOffset.Parse(value.Get<string>());nn default: throw new NotSupportedException();n }n});n

查詢和原生類型一樣,很簡單地就有結果了

using (var db = SQLiteDatabase.OpenMemoryDatabase())nusing (var query = db.CreateQuery("SELECT @a, @b;"))n{n query.Bind("@a", 1234567890);n query.Bind("@b", "2017-07-26T12:34:56+08:00");nn Console.WriteLine(query.Execute<DateTimeOffset>(0));n Console.WriteLine(query.Execute<DateTimeOffset>(1));n}n

而輸出結果為

2009/02/13 23:31:30 +00:00n2017/07/26 12:34:56 +08:00n

上面的代碼涉及到近期弄的參數綁定。注意其簽名為 SQLiteQuery.Bind<T>(string, T)。而且目前這個輪子幾乎是 0 裝箱。畢竟用了一些泛型技巧……

本地代理

目前實現了代理服務端側的請求解析,還是個 LL(1) 文法的,嗯……

弄好這一塊解析後,想到一些東西——為什麼那些庫就那麼愛用簡單字元串操作來做解析器呢?GC angry,健壯性又一般般。然後某群里還有人問我:「為什麼不用 Regex?」唉,怎麼說呢,單純地用正則其實和簡單字元串操作沒什麼兩樣……

PS:這一塊感覺有些不夠優雅……

# EOF

推薦閱讀:

debian(kali Linux) 安裝net Core
.NET 開源兩年了

TAG:NET | C# |