原创 【C#】使用 Castle 實現 AOP,以及 Autofac 集成 Castle

Castle 是 2003 年誕生於 Apache Avalon 項目,目的是爲了創建一個IOC 框架。發展到現在已經有四個組件: ORM組件:ActiveRecord IOC組件:Windsor 動態代理組件:DynamicProxy

原创 【C#】反射的用法及效率對比

反射實例化類 public class Person { public string Name { get; set; } public Person(string name) { this.Nam

原创 【C#】List 併發丟數據問題

項目中出了個 BUG,就在我眼皮子底下,很明顯的一個 BUG,愣是看了兩天才看出來。 我有多個任務併發,任務執行完成後都有一個返回結果,我用一個 List 將結果收集起來,等所有任務完成後,發送出去。結果一直 丟數據。 我反覆檢查邏輯都沒有

原创 【C#】DockPanelSuite 中 DockState.Document 狀態下子窗體控件不顯示的解決方案

DockPanelSuite 是 Winform 中優秀的佈局控件,但是這次使用過程中卻出了個問題。 我遇到的問題是這樣的,主窗體是通過 ShowDialog 顯示的,子窗體的停靠狀態爲 DockState.Document,主窗體關閉時,

原创 【C#】DataGridView 數據綁定的一些細節

多年不寫 Winform 了,突然要做一個 winform 項目,各種不順手,各種百度。 DataGridView 數據綁定的一些細節問題,記錄備查。 數據綁定 BindingList<EmployeeVO> dataSource; pr

原创 【設計模式】如何用組合替代繼承

如果問面向對象的三大特性是什麼,多數人都能回答出來:封裝、繼承、多態。 繼承 作爲三大特性之一,近來卻越來越不推薦使用,更有極端的語言,直接語法中就不支持繼承,例如 Go。這又是爲什麼呢? 爲什麼不推薦使用繼承? 假設我們要設計一個關於鳥的

原创 【C#】AutoMapper 使用手冊

目錄1 入門例子2 註冊2.1 Profile3 配置3.1 命名約定3.2 配置可見性3.3 全局屬性/字段過濾3.4 識別前綴和後綴3.5 替換字符4 調用構造函數5 數組和列表映射5.1 處理空集合5.2 集合中的多態6 方法到屬性映

原创 函數式編程中的基本概念

函數簽名 假設有一個函數 f,輸入一個 int 值,返回一個 string 值,在 C# 中,該函數可以表示爲: Func<int, string> 我們可以使用箭頭(→)符號來表示: f : int → string 箭頭符號是函數式

原创 【C#】CsvHelper 使用手冊

目錄簡介模塊讀取讀取所有記錄逐條讀取讀取單個字段寫入寫入所有記錄逐條寫入逐字段寫入特性IndexNameNameIndexIgnoreOptionalDefaultNullValuesConstantFormatBooleanTrueVal

原创 【C#】使用 System.Globalization.DateTimeFormatInfo 屏蔽系統時間格式對代碼的影響

時間格式我使用的一直都是 yyyy-MM-dd HH:mm:ss,然後某天,我改成了 yyyy/MM/dd HH:mm:ss,然後神奇的問題就來了。 怎麼會出現這種情況的呢? 因爲我手賤改了系統的日期格式。打開 控制面板 → 日期和時間

原创 【swagger】C# 中 swagger 的使用及避坑

@目錄1 安裝2 修改名稱和版本號3 顯示說明4 顯示控制器註釋及漢化5 路由相同,查詢參數不同的方法6 忽略 Model 中的某些字段7 傳遞 header8 出錯時的 HTTP 狀態碼 開發 web api 的時候,寫文檔是個痛苦的事情

原创 【C#】Newtonsoft.Json 中 JArray 添加數組報錯:Could not determine JSON object type for type 'xxx'

有時我們臨時需要一個 JSON 字符串,直接拼接肯定不是好方法,但又懶得去定義一個類,這是用 JObject 就會非常的方便。 但是在 JObject 中添加數組卻經常被坑。 List<string> names = new List<st

原创 【C#】比較 Random 與 RandomNumberGenerator 生成隨機字符串

生成隨機數,第一反應肯定是 Random 類,然而,Random 生成的隨機數被稱爲僞隨機數,因爲用 Random 生成隨機數時,需要用到一個“種子”,而 使用相同的種子,一定會產生相同序列的數字。 Random r1 = new Rand

原创 C# 定時器保活機制引起的內存泄露問題

C# 中有三種定時器,System.Windows.Forms 中的定時器和 System.Timers.Timer 的工作方式是完全一樣的,所以,這裏我們僅討論 System.Timers.Timer 和 System.Threading

原创 【C# 代碼小知識】畫蛇添足的編碼前綴

我們都知道,文件有不同的編碼,例如我們常用的中文編碼有:UTF8、GK2312 等。 Windows 操作系統中,新建的文件會在起始部分加入幾個字符的前綴,來識別編碼。 例如,新建文本文件,寫入單詞 Hello,另存爲 UTF8。Hello