
01、LinqPad是干嘛的?
LinqPad 是一个可编写、运行C#(VB/F#/SQL)代码的轻量 工具,C#开发者强烈推荐必备的工具,一个一旦用了就再也不想丢弃的工具。工具出自《C# 核心技术指南》的作者Joseph Albahari,一位.Net资深技术专家。
🎉主要应用场景:
- 快速代码功能测试(功能测试、性能测试),这可能是最常用的场景了。
- 把C#当成脚本语言,写一些小工具(含GUI),如爬虫工具、正则测试、API测试等。
- 连接数据库,查询、调试数据,用Linq、SQL查询数据。

LINQPad是一个.Net的终极试验场,被广泛用于.Net学习、测试,主要特点:
- 简单、轻量,工具只有20M+,界面简洁。
- 快速运行任何C#、F#、VB的代码片段或程序。这一点非常方便,可以快速测试一些代码,一行代码、多行代码片段、一个方法都可以快速执行,不用打开庞大的VS IDE和项目了。
- 支持切换不同.NET版本,测试各个版本的能力。
- 输出非常方便 ,提供超级
Dump
扩展方法,可输出任何数据类型,且输出结果显示非常友好,甚至可以直接显示图片、图表。 - 直接查看IL代码,及编译后的C#代码、机器码,内置了反编译工具ILSpy。
- 支持安装Nuget包,扩展及其方便。
- 内置了单元测试工具XUnit,性能测试工具Benchmark,且性能测试非常简单。
- 强大的正则表达式测试功能。
- 还有很强大的Linq查询数据库的操作。

😶唯一的缺点就是------付费,且不便宜,有免费版,但功能太少。有条件的可以下单支持一下,或者用其他某些方式先体验下,
Linqpad crack
02、LinqPad简介

1、菜单:
- File:文件操作相关功能。
- Edit:代码编辑相关功能,还有"preference"(偏好设置)。
- Query:执行代码相关的功能,还包括Nuget管理、单元测试、性能测试功能。
- Debug:调试相关功能。
2、资源区域,详见3.2
3、多标签的代码编辑功能
4、代码编辑区域
5、结果输出区域
- Result:执行结果输出的区域。
- IL+Native:实时输出的IL代码。
- Tree:代码解析的语法树,
- AI:支持OpenAI的智能代码提示、编写,需要APIKey。
📢每个Query(页签)的代码有一个独立的进程来执行,可以通过菜单栏"Query"》"Kill Process"来强制关闭当前Query代码进程。
6、添加Nuget或引用命名空间 ,F4
快捷键打开如下图配置,可添加Nuget包、添加Namespace引用。

03、常用功能
3.1、快速运行代码
支持多种语言模式,C#开发者常用的就是前面三种:
- C# Expression :C#表达式语句,如果输入多行语句,工具会自动切换模式。
- C# Statement :C#代码语句(片段),可任意多行代码、方法。
- C# Program :完整的C#代码模式,和控制台的程序的入口程序Program类似。

📢可选择不同的
.NET
版本,最新的LinqPad 8
版本支持到最最新的 .NET8、.NET9,如果要运行.NetFramework版本,则要用更老的LinqPad 5
版本。
3.2、丰富代码示例,学习进阶
- "Samples":内置丰富的代码示例,及不同C#版本的语法示例,可用来学习(+练习)C#的新语法知识。这里还有很多C#代码的的最佳实践,好好学习下可以显著提高C#技术。
- "My Queries ":代码可以保存到你本地,个人保存的代码文件都在这里。可用
#load "fileName"
的语法引用其他文件代码。 - "My Extensions":这个代码文件中可以定义全局扩展方法,任意地方就可以使用了。

3.3、强大的Dump()
输出
Dump()
是一个扩展方法,万物皆可Dump()
输出,主要作用就是输出内容,可以看做是超级版的Console.WriteLine()
。简单的数值、字符、数组,复杂的对象、表格、动态数据都可以友好的输出,甚至Chart图表、图片也是可以的。

下面是一个Chart输出,非常简单方便,做一些简单的统计、可视化很轻松。
csharp
double[] xarr = { 1.0, 2.0, 4.0, 5.0 };
double[] yarr = { 2.0, 3.0, 1.0, 4.0 };
//chart dump
xarr.Chart().AddYSeries(yarr,SeriesType.Column).Dump();

3.4、代码调试、分析
支持代码断点调试,操作和VS类似,在行号前面打标记断点即可。更方便的的是实时的代码编译结果,可以查看编译后的C#代码、IL代码,及机器码,这非常方便学习。还内置了ILSpy,快捷键Shift+Alt+R
,自动定位到当前代码的位置,当然也支持"F12"转到(ILSpy)源码。

上面的代码写了一个lock
锁的简单示例,通过编译后的C#代码、IL代码,很容易发现lock
是一个语法糖,实际是是用了混合锁Monitor
来实现的。
04、性能测试Benchmark
用LinqPad做性能测试真的是太方便了,使用 BenchmarkDotNet 非常的简单、方便,效率也很高。而在VS中使用 BenchmarkDotNet 有点一言难尽,坑不少。具体可查看《C#中的Benchmark性能测试入门》。
- 可以直接鼠标选中方法测试(方法无参数),不用专门写测试类、测试方法。
- 也支持标准的BenchmarkDotNet测试流程,再
Main()
方法里执行BenchmarkRunner.Run<BenchMarkTest>();
。
如下代码,实现一个字符串的反序输出,随便写了几个实现,一个是用指针直接操作交换字符值,另个一个是常规的数组操作方式。
- Inverse_ArrayReverse:用Array的Reverse方法实现翻转,需要创建一个字符数组、一个字符串(返回的)。
- Inverse_For:for循环翻转。
- Inverse_Pointer:指针原地翻转,无其他托管内存使用。
csharp
string Inverse_ArrayReverse()
{
var str = "123456789";
var arr = str.ToArray();
Array.Reverse(arr);
return new string(arr);
}
string Inverse_For()
{
var str = "123456789";
char[] arr = new char[str.Length];
for (int i = str.Length - 1; i >= 0; i--)
{
arr[str.Length - i - 1] = str[i];
}
return new string(arr);
}
unsafe string Inverse_Pointer()
{
var str = "123456789";
fixed (char* pstr = str)
{
for (int i = str.Length / 2 - 1; i >= 0; i--)
{
var temp = pstr[str.Length - i - 1];
pstr[str.Length - i - 1] = pstr[i];
pstr[i] = temp;
}
}
return str;
}
用Benchmark测试一下性能,在Linqpad上非常简单,选中上面两个方法,菜单"Query">"Benchmark Selected Code"即可进行测试。

测试结果如下,结果很明显了,这很便于我们做一些性能的对比测试。Inverse_ArrayReverse
耗时更长(71.46 ns),而且还额外消耗更多GC内存(AllocatedBytes 分配的托管内存)。

参考资料
©️版权申明 :版权所有@安木夕,本文内容仅供学习,欢迎指正、交流,转载请注明出处!原文编辑地址-语雀__