我的C#/.NET学习诀窍——LINQPad
在我以往的文章中,尤其涉及代碼演示的,都使用了同一個工具——LINQPad。但許多客戶面對我分享的.linq源文件都迷茫不知所措,因此有必要來聊聊一下這個強大的工具。
本文首先將對該工具做個簡單的介紹,并且分享一些LINQPad的優點,并同時分享一些周邊替代工具以及它們的優缺點。
LINQPad是什么?
在LINQPad官網 https://www.linqpad.net/ 中,介紹的副標題說LINQPad是.NET開發者的操練場。它提供了:
?簡約的代碼編輯界面?不到20MB的體積——超輕量級?強大的格式化輸出,不管你是輸出文字、表格、還是動態數據?支持多種數據庫等
LINQPad現在最新版本是6.14.4,但馬上將要發布V7,到時候將支持.NET 6和.NET 7。
LINQPad作者是Joseph Albahari,我剛好手頭就有他的一本《C# 7.0核心技術指南》,可見該大佬不僅開發能力一流,還有熱忱的知識分享能力,非常令人敬佩。
除此之外,它還如其名,LINQ,表示它也可以連接數據庫,因此你也可以用它來做一個數據庫管理工具。
有朋友告訴我LINQPad取了一個不好的名字,因為LINQ聽起來像是只能查數據庫、玩LINQ,但這不是事實。雖然LINQPad確實能查數據庫,但它更擅長的是做一些C#/.NET快速腳本與POC的工作。——也許我覺得它應該叫.NET Pad能更符合它的功能定位 。
LINQPad的優點
快速POC
POC是指概念驗證,比如開發過程中遇到以下這類情況:
?Dictionary使用.Add()添加相同的key,是否會報錯?(會)?數組形式的JToken,轉字符串數組string[]應該用強轉?還是用.ToArray<string>()?還是.ToObject<string[]>()??ASP.NET Core獲取遠程IPv6地址,使用Connection.RemoteIpAddress是否可行?(可行)?Newtonsoft.Json與System.Text.Json相比,反序列化性能哪個好?耗時、內存分配各相差多少倍?(…)
面對這些問題,下意識地會想必須要做實驗——不然到了測試時甚至生產環境時才暴露出來就太遲了。而做實驗就要寫代碼——而這個做實驗的過程,就叫POC——Proof of Concept。
經常寫代碼的開發者應該知道,開發過程中有時會特別需要做一下這種快速POC。如果全部按部就班地在Visual Studio中創建項目、添加引用,然后調試等,勢必會花費許多時間。但如果用LINQPad,打開后馬上就可以寫代碼,完成一個快速的POC,可能只需不到60秒。這一點是我認為LINQPad的主要優點,是其它開發類產品難以比擬的優秀領域。
快速分享
如果有其它同事有一些簡單的需求,如做一些數據的ETL,我們可能會有如下幾種選擇:
?給他一個二進制可執行文件,但它無法了解里面的運行細節?給他一個源代碼,但代碼往往是一個壓縮包,因為依賴包含在.csproj中,而且需要編譯?node.js或python腳本不需編譯即可運行,但依賴也要定義在package.json中,不方便
綜上幾方面,LINQPad的源文件文件.linq就脫穎而出了,它可以像node.js、python那樣不需單獨的編譯過程、也能了解代碼的運行細節,不管對分發者和接受者都很方便。
這是一個.linq文件的示例:
<Query Kind="Statements"><NuGetReference>Newtonsoft.Json</NuGetReference><Namespace>System.Net.Http</Namespace><Namespace>Newtonsoft.Json.Linq</Namespace> </Query>using var http = new HttpClient(); string url = "https://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=5&mkt=zh-cn"; string json = await http.GetStringAsync(url); JToken.Parse(json)["images"].Select(x => (string)x["url"]).Dump();LINQPad的命令行工具叫lprun6,這是針對.NET Core的,另外還有單獨針對.NET Framework的,叫lprun,運行示例:
管理功能
也許您可能不會信,但LINQPad的輸出界面不僅是一個文字展示區,還是一個功能交互區,甚至還能做一些管理功能。因為它集成了一個瀏覽器組件。LINQPad內置了許多控件,如按鈕、文本框等,雖然不至于多美觀,但對程序員來說夠用。
如上圖,我做了一個微服務網關kong的服務管理小程序,通過該程序我可以輕松以可視化的方式管理我的微服務端點與路由,比較方便——而左邊的源代碼,可以讓我輕松地了解這個程序工作的細節并擴展功能。
而這樣的小程序只需花少量代碼即可完成,完成后可以立即發給同事復用,效率很高。我的工作和生活中寫了許多這樣的小程序,比如:
?公司的私有NuGet包版本展示、升級管理工具?阿里云DNS信息展示、編輯工具?OpenWrt節點展示、快速切換工具?產品不同環境選擇、免密碼一鍵登錄工具?客戶網站信息展示、一鍵生成報表工具
等等,朋友們要是有興趣,以后我可以再深入這些細節。
其它優點
除此之外,LINQPad還有一些經久耐用的好功能,這里我很難一次性對其一一介紹清楚,但我至少能列一個目錄,如:
?內置的正則表達式驗證工具?內置的數據庫連接功能?提供了Util.GetPassword(),滿足“敏感信息不進版本控制”的強制安全性要求?提供了#load "...",腳本之間可以互相依賴?提供了快速導出Excel/Word/HTML的功能
另外,公司產品有時需要用Postman來描述API的接口、參數與使用方法,有了LINQPad我覺得甚至可以替代Postman完成它的功能。
我甚至用LINQPad做過一些游戲,如2048,打磚塊:
替代品
Visual Studio
嚴格說它不應該成為LINQPad的替代品,但大家電腦上都裝了這個,而且免費、提供了更更大的智能提示、重構等功能。但如果嚴格用來比較,我認為Visual Studio做POC的主要缺點是啟動慢,可能需要等8秒左右才能從冷啟動到可響應,然后還要花另外12秒創建一個項目,然后才開始寫代碼。而有時靈感來了就那么幾秒的事情,20秒左右的時間已經完全可以完成一個概念驗證。
RoslynPad
這款可能是LINQPad的“政治正確”型的對手。它完全免費,而且跨平臺——能在Mac、Linux上運行(跨平臺UI組件是Avalonia)。它還是完全開源項目:https://github.com/aelij/RoslynPad ,你甚至可以把它代碼下載過來隨時自己編譯一個——編譯只需安裝Visual Studio,然后按Ctrl+F5即可編譯并運行。而且它支持.csx——基于C#的腳本語言,這種語言其實比.linq更流行一些,畢竟只要安裝.NET SDK就能在服務器上運行。
至于它的缺點,最主要的是功能單一,以下我列個圖表比較RoslynPad和LINQPad的功能:
| 功能 | LINQPad | RoslynPad |
| 智能提示 | ? | ? |
| NuGet包安裝 | ? | ? |
| 腳本化運行 | ? | ? |
| 支持.NET Core | ? | ? |
| 跨平臺 | ? | ? |
| 開源 | ? | ? |
| 完全版免費 | ? | ? |
| VB、F#支持 | ? | ? |
| 豐富的快捷鍵 | ? | ? |
| ILSpy反編譯 | ? | ? |
| 圖表功能 | ? | ? |
| 富媒體輸出 | ? | ? |
| 表格輸出 | ? | ? |
| 不換行輸出 | ? | ? |
| JToken感知輸出 | ? | ? |
| 數據庫連接 | ? | ? |
綜上,RoslynPad算是低配版的LINQPad,我推薦不想買LINQPad高級版的朋友,使用這個工具。
Xamarin Workbooks
這個工具仿照的是Jupyter Notebook,后者現在其實已經運行了C#/.NET,也支持的是.csx腳本。這個工具在輸出時相比RoslynPad有一定優勢,但我之前試用發現有一些bug,比如有時界面會卡住不能操作。
但其實寫文檔和做快速POC其實是兩碼事,就算是做文檔,代碼的部分其實也不多,因此這類工具定位與我的需求有差異。
價格
首先聊它的免費版,免費版的LINQPad提供了完整的代碼功能、數據庫連接功能和命令行功能,但限制了智能提示,也不能安裝NuGet包。我想對大多數人來說,智能提示的缺失很致命。
在我真正購買正版授權之前,我花了約一個月的時候完全使用免費版,因為我覺得這個工具的最佳的優點在于做超快速的POC——這一點是任何其它工具都做不到的。因此我認為就算是免費版,也有它不可或缺的意義。(另外可能還有一個小小的原因是,我常常訓練自己盡量不依賴IDE提示寫代碼????)
然后是它的價格如它圖,帶所有高級功能的高級版售價115美元。按今天的匯率折合人民幣約774.395元,現在買送LINQPad 7的授權。對想買個軟件的人來說,不便宜,但主要看你怎么理解這個數字。對我來說,它提供的高效POC的功能,給我提供一次“編程革命”,現在也是我每天敲代碼樂趣的主要源泉。從這兩個角度來說,我花得很值。
另外還有一些“不可言說”的事情,好用的東西網上必然也能找到一些破解版,這無疑為不愿花錢的朋友提供了福音。但它有幾大缺點:
?版本號固定,因此不能享受最新的功能(如Edge Chroumiun渲染引擎)?需要想辦法禁用自動更新,因為更新后破解就消失了?某些破解會夾帶私貨,如安裝木馬或挖礦軟件?找過的都知道,找破解本身就是一件痛苦的事,提供破解的網站往往很繞
基于這些原因,以及我還希望LINQPad作者能有動力持續開發、更新這樣富有創造力的軟件,我強烈建議支持正版。
但如果一定想要,我可以提供一個方向:使用任意搜索引擎搜索LINQPad Premium 6.13.13 Crack總結與展望
本文大致介紹了LINQPad的強大功能,以及我與LINQPad的一些緣分/背景。
說來LINQPad也不是沒有缺點,它網上有個論壇,我經常會在上面提一些需求或bug,作者經常解決得很快。
一直以來另一個很困擾客戶的問題是.linq腳本如何移植到Visual Studio中當作普通的C#程序運行。雖然我完全看不出這有任何困難,但稍后有機會我會深入聊聊這些LINQPad功能如何移植。
最后,我要聲明:我沒有收LINQPad一分錢。相關實體請給我打錢????
喜歡的朋友 請關注我的微信公眾號:【DotNet騷操作】
總結
以上是生活随笔為你收集整理的我的C#/.NET学习诀窍——LINQPad的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 更新两个WPF开源项目
- 下一篇: gRPC在C#中的未来属于grpc-do