LINQPad,我的C#/.NET学习诀窍

在我以往的文章中,尤其涉及代码演示的,都使用了同一个工具——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.JsonSystem.Text.Json相比,反序列化性能哪个好?耗时、内存分配各相差多少倍?(…)

面对这些问题,下意识地会想必须要做实验——不然到了测试时甚至生产环境时才暴露出来就太迟了。而做实验就要写代码——而这个做实验的过程,就叫POC——Proof of Concept

经常写代码的开发者应该知道,开发过程中有时会特别需要做一下这种快速POC。如果全部按部就班地在Visual Studio中创建项目、添加引用,然后调试等,势必会花费许多时间。但如果用LINQPad,打开后马上就可以写代码,完成一个快速的POC,可能只需不到60秒。这一点是我认为LINQPad的主要优点,是其它开发类产品难以比拟的优秀领域。

快速分享

如果有其它同事有一些简单的需求,如做一些数据的ETL,我们可能会有如下几种选择:

  • 给他一个二进制可执行文件,但它无法了解里面的运行细节
  • 给他一个源代码,但代码往往是一个压缩包,因为依赖包含在.csproj中,而且需要编译
  • node.jspython脚本不需编译即可运行,但依赖也要定义在package.json中,不方便

综上几方面,LINQPad的源文件文件.linq就脱颖而出了,它可以像node.jspython那样不需单独的编译过程、也能了解代码的运行细节,不管对分发者和接受者都很方便。

这是一个.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 StudioPOC的主要缺点是启动慢,可能需要等8秒左右才能从冷启动到可响应,然后还要花另外12秒创建一个项目,然后才开始写代码。而有时灵感来了就那么几秒的事情,20秒左右的时间已经完全可以完成一个概念验证。

RoslynPad

这款可能是LINQPad的“政治正确”型的对手。它完全免费,而且跨平台——能在MacLinux上运行(跨平台UI组件是Avalonia)。它还是完全开源项目:https://github.com/aelij/RoslynPad ,你甚至可以把它代码下载过来随时自己编译一个——编译只需安装Visual Studio,然后按Ctrl+F5即可编译并运行。而且它支持.csx——基于C#的脚本语言,这种语言其实比.linq更流行一些,毕竟只要安装.NET SDK就能在服务器上运行。

至于它的缺点,最主要的是功能单一,以下我列个图表比较RoslynPadLINQPad的功能:

功能 LINQPad RoslynPad
智能提示
NuGet包安装
脚本化运行
支持.NET Core
跨平台
开源
完全版免费
VBF#支持
丰富的快捷键
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骚操作】

LINQPad,我的C#/.NET学习诀窍的更多相关文章

  1. ASP.NET EF 使用LinqPad 快速学习Linq

    使用LinqPad这个工具可以很快学习并掌握linq[Language Integrated Query] linqPad官方下载地址:http://www.linqpad.net/ linqPad4 ...

  2. js_html_input中autocomplete="off"在chrom中失效的解决办法 使用JS模拟锚点跳转 js如何获取url参数 C#模拟httpwebrequest请求_向服务器模拟cookie发送 实习期学到的技术(一) LinqPad的变量比较功能 ASP.NET EF 使用LinqPad 快速学习Linq

    js_html_input中autocomplete="off"在chrom中失效的解决办法 分享网上的2种办法: 1-可以在不需要默认填写的input框中设置 autocompl ...

  3. LinqPad工具:帮你快速学习Linq

    LinqPad工具:帮你快速学习Linq 参考: http://www.cnblogs.com/li-peng/p/3441729.html ★:linqPad下载地址:http://www.linq ...

  4. 用linqPad帮助你快速学习LINQ

    在这里我向大家推荐的一个具是LinqPad有了这个工具并熟练使用就可以很快学习并掌握linq linqPad下载地址:http://www.linqpad.net/ 它也自带了很多例子方便大家查询,l ...

  5. linqPad快速学习LINQ(含视频)

    在这里我向大家推荐的一个具是LinqPad有了这个工具并熟练使用就可以很快学习并掌握linq 安装步骤: 使用LINQPad可以很方便的调试linq以及lambda表达式.其中自带了linq以及F#简 ...

  6. 学习LINQ,发现一个好的工具。LINQPad!!

    今日学习LINQ,发现一个好的工具.LINQPad!! 此工具的好处在于,不需要在程序内执行,直接只用工具测试.然后代码通过即可,速度快,简洁方便. 可以生成其LINQ查询对应的lambda和SQL语 ...

  7. 使用 LINQPad 助力 LINQ 学习

    简介一图示意 简介 LINQPad 是一款学习 LINQ,优化 SQL 的好助手. 它的一大特点是内置了新版<C# in a Nutshell>的全部 LINQ 示例,不管是配合原书进行练 ...

  8. linqPad帮助你快速学习LINQ

    linqPad http://www.cnblogs.com/li-peng/p/3441729.html http://www.linqpad.net/ Linqer http://www.sqlt ...

  9. 【转载学习前辈的经验】-- Mistakes I made (as a developer) 我(作为一名开发者)所犯过的错误

    我 2006 年开始工作,至今已经 10 年.10 年是个里程碑,我开始回顾自己曾经犯过的错误,以及我希望从同行那里得到什么类型的忠告.一切都在快速改变,10 年了,我不能确定这些秘诀是否还有用. 不 ...

随机推荐

  1. 算法 - 链表操作思想 && case

    算法 - 链表操作题目套路 前面这一篇文章主要讲链表操作时候的实操解决方式,本文从本质讲解链表操作的元信息,学完后,再也不怕链表操作题目了. 1.链表的基本操作 链表的基本操作无外乎插入,删除,遍历 ...

  2. Aliyun Oss 上传文件

    目录 Aliyun OSS OSS 简介 OSS 基本概念 OSS 功能概述 OSS 使用 创建存储空间Bucket 创建子目录 Java编码 测试 Aliyun OSS OSS 简介 阿里云对象存储 ...

  3. FFT HDL Optimized模块HDL综合代码生成及与Xilinx xfft IP MEX接口精度详细比较

    前面一篇随笔叙述了关于MATLAB中FFT_HDL_Optimzed模块定点(IEEE754单精度float格式)二进制与十进制转换实现,有需要的往前翻一下即可.这一篇随笔将叙述 FFT HDL Op ...

  4. HDOJ-6645(简单题+贪心+树)

    Stay Real HDOJ-6645 由小根堆的性质可以知道,当前最大的值就在叶节点上面,所以只需要排序后依次取就可以了. #include<iostream> #include< ...

  5. MySQL基础知识:创建MySQL数据库和表

    虚构一个微型在线书店的数据库和数据,作为后续MySQL脚本的执行源,方便后续MySQL和SQL的练习. 在虚构这个库的过程中,主要涉及的是如何使用命令行管理 MySQL数据库对象:数据库.表.索引.外 ...

  6. 2019 GDUT Rating Contest III : Problem E. Family Tree

    题面: E. Family Tree Input file: standard input Output file: standard output Time limit: 1 second Memory ...

  7. dfs求连通块

    递归 递归是什么?绝大部分人都会说:自己调用自己,刚开始我也是这样理解递归的.确实没错,递归的确是自己调用自己.递归简单的应用:编写一个能计算斐波那契数列的函数,也就是这样: int fb(int n ...

  8. python-实现双链表

    双链表和单链表进行比较的优点与不同 节点多了一个前驱指针域 在很多基本操作上,多了一种选择,因为双链表可以向前进行移动寻位 如果给每个节点添加一个对应的下标,那么在寻找节点时,我们可以使用二分发来进行 ...

  9. ch1_6_5求解旋转词问题

    import java.util.Scanner; public class ch1_6_5求解旋转词问题 { public static void main(String[] args) { // ...

  10. 7、MyBatis教程之分页实现

    8.分页实现 1.limit实现分页 思考:为什么需要分页? 在学习mybatis等持久层框架的时候,会经常对数据进行增删改查操作,使用最多的是对数据库进行查询操作,如果查询大量数据的时候,我们往往使 ...