原创 .NET/C# 使用 Span<T> 爲字符串處理提升性能

.NET Core 2.1 和 C# 7.2 帶來了 Span 的原生支持,原本需要使用不安全代碼操作的內存塊現在可以使用安全的方式來完成。此前在性能和穩定性上需要有所取捨,而現在可以兼得了。 簡單的例子 先來看一個字符串處理時使用

原创 .NET 使用 XPath 來讀寫 XML 文件

XPath 是 XML 路徑語言(XML Path Language),用來確定XML文檔中某部分位置的語言。無論是什麼語言什麼框架,幾乎都可以使用 XPath 來高效查詢 XML 文件。 本文將介紹 .NET 中的 XPath 相關類型

原创 (2/2) 爲了理解 UWP 的啓動流程,我從零開始創建了一個 UWP 程序

每次使用 Visual Studio 的模板創建一個 UWP 程序,我們會在項目中發現大量的項目文件、配置、應用啓動流程代碼和界面代碼。然而這些文件在 UWP 程序中到底是如何工作起來的? 我從零開始創建了一個 UWP 程序,用於探索這些

原创 (1/2) 爲了理解 UWP 的啓動流程,我從零開始創建了一個 UWP 程序

每次使用 Visual Studio 的模板創建一個 UWP 程序,我們會在項目中發現大量的項目文件、配置、應用啓動流程代碼和界面代碼。然而這些文件在 UWP 程序中到底是如何工作起來的? 我從零開始創建了一個 UWP 程序,用於探索這些

原创 WPF 使用 WindowChrome,在自定義窗口標題欄的同時最大程度保留原生窗口樣式(類似 UWP/Chrome)

WPF 自定義窗口樣式有多種方式,不過基本核心實現都是在修改 Win32 窗口樣式。然而,Windows 上的應用就應該有 Windows 應用的樣子嘛,在保證自定義的同時也能與其他窗口樣式保持一致當然能最大程度保證 Windows 操作

原创 C#/.NET 中推薦的 Dispose 模式的實現

如果你覺得你的類需要實現 IDisposable 接口,還是需要注意一些坑的。不過前人準備了 Dispose 模式 供我們參考,最大程度避免這樣的坑。 C#程序中的 Dispose 方法,一旦被調用了該方法的對象,雖然還沒有垃圾回收,但

原创 Windows 10 四月更新,文件夾名稱也能區分大小寫?

Windows 向來是不區分文件和文件夾大小寫的,但是從 NTFS 開始卻又支持區分文件夾大小寫。而 Linux/Mac OS 一向都是區分文件和文件夾大小寫的。 本文將推薦 Windows 10 四月更新帶來的新特性——讓文件夾名稱也能

原创 在製作跨平臺的 NuGet 工具包時,如何將工具(exe/dll)的所有依賴一併放入包中

NuGet 提供了工具類型的包支持,生成一個基於 .NET Core 的 dll 或者基於 .NET Framework 的 exe 之後,你幾乎可以對項目做任何事情。但是,默認情況下,NuGet 不會將這些工具的依賴一起打包進入 NuG

原创 理解 Roslyn 中的紅綠樹(Red-Green Trees)

Roslyn 的 API 是非常易用的。即便如此複雜的 C# 語法,建立的複雜的 C# 語法樹,還有其複雜的樹遍歷和修改過程,也都被其 API 包裝得乾淨簡潔。 而這背後是它的重要設計思路 —— 紅綠樹。 紅綠樹的影子 如果你是通過搜

原创 如何在 .NET 庫的代碼中判斷當前程序運行在 Debug 下還是 Release 下

我們經常會使用條件編譯符 #if DEBUG 在 Debug 下執行某些特殊代碼。但是一旦我們把代碼打包成 dll,然後發佈給其他小夥伴使用的時候,這樣的判斷就失效了,因爲發佈的庫是 Release 配置的;那些 #if DEBUG 的代

原创 WPF 中使用附加屬性,將任意 UI 元素或控件裁剪成圓形(橢圓)

不知從什麼時候開始,頭像流行使用圓形了,於是各個平臺開始追逐顯示圓形裁剪圖像的技術。WPF 作爲一個優秀的 UI 框架,當然有其內建的機制支持這種圓形裁剪。 不過,內建的機制僅支持畫刷,而如果被裁剪的元素支持交互,或者擁有普通畫刷無法達到

原创 XML 的 XPath 語法

XPath 是 XML 路徑語言(XML Path Language),用來確定XML文檔中某部分位置的語言。無論是什麼語言什麼框架,幾乎都可以使用 XPath 來高效查詢 XML 文件。 本文將介紹 XPath 的一些語法。 本文讀寫

原创 如何根據一個絕對文件路徑生成一個相對文件路徑

日常的開發中,獲取絕對文件路徑纔是主流吧!連 Path.GetFullPath 這種生成絕對路徑的方法都已經成爲 .NET Standard 的一部分了。 然而,生成相對路徑依然有用——比如你的配置文件是相對於工作目錄的,必須這個路徑是輸