舞鹤游天 發表於 2025-6-23 09:11:00

LinqPad:C#代码测试学习一品神器

<p><img src="https://img2024.cnblogs.com/blog/151257/202506/151257-20250620231429186-215483482.png" alt="" loading="lazy"></p>
<h1 id="01linqpad是干嘛的">01、LinqPad是干嘛的?</h1>
<p>LinqPad 是一个可编写、运行C#(VB/F#/SQL)代码的<strong>轻量</strong>工具,C#开发者强烈推荐必备的工具,一个一旦用了就再也不想丢弃的工具。工具出自《C# 核心技术指南》的作者Joseph Albahari,一位.Net资深技术专家。</p>
<p><strong>🎉主要应用场景</strong>:</p>
<ul>
<li>快速代码功能测试(功能测试、性能测试),这可能是最常用的场景了。</li>
<li>把C#当成脚本语言,写一些小工具(含GUI),如爬虫工具、正则测试、API测试等。</li>
<li>连接数据库,查询、调试数据,用Linq、SQL查询数据。</li>
</ul>
<p><img src="https://img2024.cnblogs.com/blog/151257/202506/151257-20250620231429380-1299048407.png" alt="" loading="lazy"></p>
<p><font style="color: rgba(25, 19, 22, 1)">LINQPad是一个.Net的终极试验场,被广泛用于.Net学习、测试,主要特点:</font></p>
<ul>
<li><strong><font style="color: rgba(210, 45, 141, 1)">简单、轻量</font></strong>,工具只有20M+,界面简洁。</li>
<li><strong><font style="color: rgba(210, 45, 141, 1)">快速运行任何C#、F#、VB的代码片段或程序</font></strong>。这一点非常方便,可以快速测试一些代码,一行代码、多行代码片段、一个方法都可以快速执行,不用打开庞大的VS IDE和项目了。</li>
<li><strong><font style="color: rgba(210, 45, 141, 1)">支持切换不同.NET版本</font></strong>,测试各个版本的能力。</li>
<li><strong>输出非常方便</strong>,提供超级<code>Dump</code>扩展方法,可输出任何数据类型,且输出结果显示非常友好,甚至可以直接显示图片、图表。</li>
<li>直接查看IL代码,及编译后的C#代码、机器码,内置了反编译工具ILSpy。</li>
<li>支持安装Nuget包,扩展及其方便。</li>
<li>内置了单元测试工具XUnit,性能测试工具Benchmark,且性能测试非常简单。</li>
<li>强大的正则表达式测试功能。</li>
<li>还有很强大的Linq查询数据库的操作。</li>
</ul>
<p><img src="https://img2024.cnblogs.com/blog/151257/202506/151257-20250620231429394-1231528701.png" alt="" loading="lazy"></p>
<blockquote>
<p>😶唯一的缺点就是——付费,且不便宜,有免费版,但功能太少。有条件的可以下单支持一下,或者用其他某些方式先体验下,<s>Linqpad crack</s></p>
</blockquote>
<hr>
<h1 id="02linqpad简介">02、LinqPad简介</h1>
<p><img src="https://img2024.cnblogs.com/blog/151257/202506/151257-20250620231429399-1391853796.png" alt="" loading="lazy"></p>
<p><strong><font style="color: rgba(210, 45, 141, 1)">1、菜单</font></strong>:</p>
<ul>
<li>File:文件操作相关功能。</li>
<li>Edit:代码编辑相关功能,还有“preference”(偏好设置)。</li>
<li>Query:执行代码相关的功能,还包括Nuget管理、单元测试、性能测试功能。</li>
<li>Debug:调试相关功能。</li>
</ul>
<p><strong>2、资源区域</strong>,详见3.2</p>
<p><strong>3、多标签的代码编辑功能</strong></p>
<p><strong>4、代码编辑区域</strong></p>
<p><strong>5、结果输出区域</strong></p>
<ul>
<li>Result:执行结果输出的区域。</li>
<li>IL+Native:实时输出的IL代码。</li>
<li>Tree:代码解析的语法树,</li>
<li>AI:支持OpenAI的智能代码提示、编写,需要APIKey。</li>
</ul>
<blockquote>
<p>📢每个Query(页签)的代码有一个独立的进程来执行,可以通过菜单栏“Query”》“Kill Process”来强制关闭当前Query代码进程。</p>
</blockquote>
<p><strong>6、添加Nuget或引用命名空间</strong>,<code>F4</code>快捷键打开如下图配置,可添加Nuget包、添加Namespace引用。</p>
<p><img src="https://img2024.cnblogs.com/blog/151257/202506/151257-20250620231429390-856298553.png" alt="" loading="lazy"></p>
<hr>
<h1 id="03常用功能">03、常用功能</h1>
<h2 id="31快速运行代码">3.1、快速运行代码</h2>
<p>支持多种语言模式,C#开发者常用的就是前面三种:</p>
<ul>
<li><strong>C# Expression</strong> :C#表达式语句,如果输入多行语句,工具会自动切换模式。</li>
<li><strong>C# Statement</strong> :C#代码语句(片段),可任意多行代码、方法。</li>
<li><strong>C# Program</strong> :完整的C#代码模式,和控制台的程序的入口程序Program类似。</li>
</ul>
<p><img src="https://img2024.cnblogs.com/blog/151257/202506/151257-20250620231429377-427251338.png" alt="" loading="lazy"></p>
<blockquote>
<p>📢可选择不同的<code>.NET</code>版本,最新的<code>LinqPad 8</code>版本支持到最最新的 .NET8、.NET9,如果要运行.NetFramework版本,则要用更老的<code>LinqPad 5</code>版本。</p>
</blockquote>
<h2 id="32丰富代码示例学习进阶">3.2、丰富代码示例,学习进阶</h2>
<ul>
<li>“<strong>Samples</strong>”:内置丰富的代码示例,及不同C#版本的语法示例,可用来学习(+练习)C#的新语法知识。这里还有很多C#代码的的最佳实践,好好学习下可以显著提高C#技术。</li>
<li>“<strong>My Queries</strong>”:代码可以保存到你本地,个人保存的代码文件都在这里。可用<code>#load "fileName"</code>的语法引用其他文件代码。</li>
<li>“<strong>My Extensions</strong>”:这个代码文件中可以定义全局扩展方法,任意地方就可以使用了。</li>
</ul>
<p><img src="https://img2024.cnblogs.com/blog/151257/202506/151257-20250620231429380-1253575893.png" alt="" loading="lazy"></p>
<h2 id="33强大的dump输出">3.3、强大的<code>Dump()</code>输出</h2>
<p><code>Dump()</code>是一个扩展方法,万物皆可<code>Dump()</code>输出,主要作用就是输出内容,可以看做是超级版的<code>Console.WriteLine()</code>。简单的数值、字符、数组,复杂的对象、表格、动态数据都可以友好的输出,甚至Chart图表、图片也是可以的。</p>
<p><img src="https://img2024.cnblogs.com/blog/151257/202506/151257-20250620231429397-1700087649.png" alt="" loading="lazy"></p>
<p>下面是一个<font style="color: rgba(0, 0, 0, 1)">Chart输出,非常简单方便,做一些简单的统计、可视化很轻松。</font></p>
<pre><code class="language-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();
</code></pre>
<p><img src="https://img2024.cnblogs.com/blog/151257/202506/151257-20250620231429370-1182428055.png" alt="" loading="lazy"></p>
<h2 id="34代码调试分析">3.4、代码调试、分析</h2>
<p>支持代码断点调试,操作和VS类似,在行号前面打标记断点即可。更方便的的是实时的代码编译结果,可以查看编译后的C#代码、IL代码,及机器码,这非常方便学习。还内置了ILSpy,快捷键<code>Shift+Alt+R</code>,自动定位到当前代码的位置,当然也支持“F12”转到(ILSpy)源码。</p>
<p><img src="https://img2024.cnblogs.com/blog/151257/202506/151257-20250620231429425-1351873662.png" alt="" loading="lazy"></p>
<p>上面的代码写了一个<code>lock</code>锁的简单示例,通过编译后的C#代码、IL代码,很容易发现<code>lock</code>是一个语法糖,实际是是用了混合锁<code>Monitor</code>来实现的。</p>
<h1 id="04性能测试benchmark">04、性能测试Benchmark</h1>
<p>用LinqPad做性能测试真的是太方便了,使用 BenchmarkDotNet 非常的简单、方便,效率也很高。而在VS中使用 BenchmarkDotNet 有点一言难尽,坑不少。具体可查看《C#中的Benchmark性能测试入门》。</p>
<ul>
<li>可以直接鼠标选中方法测试(方法无参数),不用专门写测试类、测试方法。</li>
<li>也支持标准的BenchmarkDotNet测试流程,再<code>Main()</code>方法里执行<code>BenchmarkRunner.Run&lt;BenchMarkTest&gt;();</code>。</li>
</ul>
<p>如下代码,实现一个字符串的反序输出,随便写了几个实现,一个是用指针直接操作交换字符值,另个一个是常规的数组操作方式。</p>
<ul>
<li>Inverse_ArrayReverse:用Array的Reverse方法实现翻转,需要创建一个字符数组、一个字符串(返回的)。</li>
<li>Inverse_For:for循环翻转。</li>
<li>Inverse_Pointer:指针原地翻转,无其他托管内存使用。</li>
</ul>
<pre><code class="language-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;
        for (int i = str.Length - 1; i &gt;= 0; i--)
        {
                arr = str;
        }
        return new string(arr);
}
unsafe string Inverse_Pointer()
{
        var str = "123456789";
        fixed (char* pstr = str)
        {
                for (int i = str.Length / 2 - 1; i &gt;= 0; i--)
                {
                        var temp = pstr;
                        pstr = pstr;
                        pstr = temp;
                }
        }
        return str;
}
</code></pre>
<p>用Benchmark测试一下性能,在Linqpad上非常简单,选中上面两个方法,菜单“Query”&gt;“Benchmark Selected Code”即可进行测试。</p>
<p><img src="https://img2024.cnblogs.com/blog/151257/202506/151257-20250620231429178-65231937.png" alt="" loading="lazy"></p>
<p>测试结果如下,结果很明显了,这很便于我们做一些性能的对比测试。<code>Inverse_ArrayReverse()</code>耗时更长(71.46 ns),而且还额外消耗更多GC内存(AllocatedBytes 分配的托管内存)。</p>
<p><img src="https://img2024.cnblogs.com/blog/151257/202506/151257-20250620231429324-175659204.png" alt="" loading="lazy"></p>
<hr>
<h1 id="参考资料">参考资料</h1>
<ul>
<li>LinqPad 官网</li>
<li>B站入坑视频:.NET 实用工具推荐:LINQPad、LINQPad 实用技巧分享</li>
<li>C#中的Benchmark性能测试入门</li>
</ul>
<hr>
<blockquote>
<p><strong>©️版权申明</strong>:版权所有@安木夕,本文内容仅供学习,欢迎指正、交流,转载请注明出处!<em>原文编辑地址-语雀</em>__</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/anding/p/18939444
頁: [1]
查看完整版本: LinqPad:C#代码测试学习一品神器