我的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.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的功能:

功能LINQPadRoslynPad
智能提示
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骚操作】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302673.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学在生活中无处不在,36个生活小故事涵盖小学所有的数学知识!

数学不是脱离生活的&#xff0c;而是源于生活&#xff0c;更要回归于生活。解决生活中遇到的问题&#xff0c;就是最自然的数学应用题。生活场景中的学习&#xff0c;是最生动的体验式学习机会。用学到的数学知识来解决生活中的问题&#xff0c;正是孩子体会数学奥妙的绝佳机会…

每天的0点php,使用strtotime,这个月的第一天凌晨0点在PHP?(Using just strtotime, 0 am first day of this month in PHP?)...

使用strtotime&#xff0c;这个月的第一天凌晨0点在PHP&#xff1f;(Using just strtotime, 0 am first day of this month in PHP?)echo mydate(strtotime(1 am first day of this month));以上工作结果2017-10-01 01:00:00 &#xff0c;但我很难在凌晨0点做到。 24am, 24pm,…

面试八股文:你写过自定义任务调度器吗?

最近入职了新公司&#xff0c;尝试阅读祖传代码&#xff0c;记录并更新最近的编程认知。思绪由Q1引发&#xff0c;后续Q2、Q3基于Q1的发散探究Q1. Task.Run、Task.Factory.StartNew 的区别&#xff1f;我们常使用Task.Run和Task.Factory.StartNew创建并启动任务&#xff0c;但是…

快速掌握MATLAB应用,从这一步开始

有人说&#xff0c;“MATLAB除了不会生孩子&#xff0c;什么都会。”矩阵运算、数据可视化、GUI&#xff08;用户界面&#xff09;设计、甚至是连接其他编程语言&#xff0c;MATLAB都能轻松实现&#xff01;那么&#xff0c;MATLAB到底有多厉害&#xff1f;MATLAB拥有丰富的算法…

Solarwinds的NetFlow Traffic Analyzer中的Cisco设备配置

如果要使用Solarwinds的NetFlow Traffic Analyzer这个产品首先要安装Orion然后再安装Netflow&#xff0c;其次要设备支持Netflow&#xff0c;下面列出的是支持netflow的cisco设备&#xff1a;支持cisco netflower的cisco设备2007-08-16 15:09 Cisco 800, 1700, 1800, 2800, 380…

mobile.php discuz,电脑访问discuz手机版【触屏版跳转标准版的修改方法】

推荐方法&#xff1a;以前我们介绍过如何通过修改Chrome浏览器运行参数的方法来模拟手机访问网站&#xff0c;但是在Chrome 32和33版本以后增加了更加便捷的方法&#xff0c;在开发者工具中只需要设置一下就能方便的模拟各种手机型号的访问效果了。方法如下&#xff1a;1、打开…

深入探究ASP.NET Core读取Request.Body的正确方式

前言相信大家在使用ASP.NET Core进行开发的时候&#xff0c;肯定会涉及到读取Request.Body的场景&#xff0c;毕竟我们大部分的POST请求都是将数据存放到Http的Body当中。因为笔者日常开发所使用的主要也是ASP.NET Core所以笔者也遇到这这种场景&#xff0c;关于本篇文章所套路…

送给“苦逼”的IT人系列1:IT人的“钱”景以及收入的两道坎

虽然IT工作五花八门&#xff0c;而且年纪有老有少&#xff0c;但IT人的收入总体还是比较有规律的&#xff0c;很明显的可以看出有两道坎&#xff0c;分别是10W&#xff0c;和30W&#xff0c;当然&#xff0c;我说的是年薪&#xff0c;是RMB&#xff0c;不包含任何跟销售相关的提…

追MM的各种算法

全世界有3.14 % 的人已经关注了数据与算法之美动态规划基本上就是说&#xff1a;你追一个MM的时候&#xff0c;需要对该MM身边的各闺中密友都好&#xff0c;这样你追MM这个问题就分解为对其MM朋友的问题&#xff0c;只有把这些问题都解决了&#xff0c;最终你才能追到MM。因此&…

gRPC在C#中的未来属于grpc-dotnet

作者&#xff1a;Jan Tattermuschgrpc-dotnet&#xff08;Grpc.Net.Client[1]和Grpc.AspNetCore.Server[2] nuget 包&#xff09;现在是.NET/C#中推荐的 gRPC 实现。最初的 gRPC C#实现&#xff08;Grpc.Core nuget 包&#xff09;将进入维护模式&#xff0c;不会得到任何新功能…

(部分来自windows核心编程)远程注入dll

{//仅仅支持ANSI路径//find the wndHWND hwnd FindWindow(NULL,"1.txt - 记事本");//get pidDWORD tid,pid;tid GetWindowThreadProcessId(hwnd,&pid);if (0pid)//for test{pid GetCurrentProcessId();}HANDLE hProcess OpenProcess(PROCESS_ALL_ACCESS,FALS…

linux命令apprw,linux命令学习1(示例代码)

[[email protected] app]# cat /etc/redhat-releaseCentOS Linux release 7.1.1503 (Core)总用量 2636-rw-r--r--. 1 root root 1222783 10月 28 12:09 Glances-1.7.1.tar.gz-rw-r--r--. 1 root root 388499 11月 7 13:20 htop-1.0.2.tar.gz-rw-r--r--. 1 root root 1081874 …

ML.NET 示例:对象检测

ML.NET 版本API 类型状态应用程序类型数据类型场景机器学习任务算法v1.4动态API最新控制台应用程序图像文件对象检测深度学习Tiny Yolo2 ONNX 模型有关如何构建此应用程序的详细说明&#xff0c;请参阅Microsoft Docs网站上附带的教程。问题对象检测是计算机视觉中的一个经典问…

双十一来了,揭秘菜鸟物流背后的那些算法黑科技

又是一年双十一&#xff0c;又一个巨大的挑战摆在了包括菜鸟网络在内的物流面前&#xff0c;但随着人工智能、大数据的应用越来越广泛&#xff0c;无人化仓储、无人化配送越来越多&#xff0c;供应链越来越扁平化&#xff0c;各种算法应用到物流领域的每一个细节。那么&#xf…

socket编程资料-网络收集

1、什么是Socket&#xff1f; Socket又称之为“套接字”&#xff0c;是系统提供的用于网络通信的方法。它的实质并不是一种协议&#xff0c;没有规定计算机应当怎么样传递消息&#xff0c;只是给程序员提供了一个发送消息的接口&#xff0c;程序员使用这个接口提供的方法&#…

linux监听端口丢失,linux – 如果没有监听端口,则为Systemd重启服务

我建议你采用不同的方法,并使用专用的监控工具来实现这一目标.我最喜欢的监控工具,允许重新启动服务,以防它们崩溃,或者不再在其配置的端口上监听,这是monit&#xff1a;https://packages.debian.org/jessie/monit配置文件中有很多示例,在此站点和其他地方有关设置的示例.我将列…

开源推荐:Asp.Net Core入门学习手册!

前言推荐一个入门级的.NET Core开源项目&#xff0c;非常适合新手入门学习.NET Core。开源地址:https://github.com/windsting/little-aspnetcore-book。手册在线下载地址&#xff1a;https://nbarbettini.gitbooks.io/little-asp-net-core-book/content/chapters/mvc-basics/c…

如何拿到高薪数据分析师offer?从精准解读一篇招聘信息开始!

大家好&#xff0c;我是大鹏&#xff0c;目前是一名数据分析师&#xff0c;从非本专业成功转行&#xff0c;创立“数据团学社”“城市数据研习社”&#xff0c;运营数十万人社群&#xff0c;联合发起“城市数据团”。最近有很多学弟学妹咨询我入行数据分析师的情况。总体上说&a…

微软翻译api的使用介绍和注意事项

google翻译api已经收费了&#xff0c;而微软翻译api目前是免费的&#xff0c;支持几种不同的方式访问&#xff0c;如果感兴趣可以自己封装下协议处理。官方介绍&#xff1a; http://msdn.microsoft.com/en-us/library/hh454950.aspx。 这里介绍一下java下的使用。Java下使用微软…

linux备份文件到ftp上,Linux服务器下用FTP上传下载备份文件

从linux服务器批量上传/home/test文件夹里面文件到FTP(192.168.1.122)里面wwwroot目录##shell脚本如下&#xff1a;updir/home/testtodirwwwrootip192.168.1.122usertestpasswordtest123123sssfind $updir -type d -printf $todir/’%P\n’| awk ‘{if ($0 “”)next;print “…