{"id":703865,"date":"2026-05-12T10:54:09","date_gmt":"2026-05-12T09:54:09","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=dotnet&#038;p=703865"},"modified":"2026-05-12T10:57:22","modified_gmt":"2026-05-12T09:57:22","slug":"dotinsights-may-2026","status":"publish","type":"dotnet","link":"https:\/\/blog.jetbrains.com\/zh-hans\/dotnet\/2026\/05\/12\/dotinsights-may-2026","title":{"rendered":"dotInsights | May 2026"},"content":{"rendered":"\n<p><strong>Did you know?<\/strong> <a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/csharp\/language-reference\/keywords\/ref\" target=\"_blank\" rel=\"noopener\">C# supports <code>ref return<\/code> and <code>ref local<\/code><\/a>, which let you return and work with references to variables instead of copies of their values.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1280\" height=\"720\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2026\/04\/DN-social-BlogFeatured-1280x720-1.png\" alt=\"dotInsights | May 2026\" class=\"wp-image-703869\"\/><\/figure>\n\n\n\n<p>Welcome to dotInsights by JetBrains! This newsletter is the home for recent .NET and software development related information.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd17 Links<\/h2>\n\n\n\n<p>Here\u2019s the latest from the developer community.<\/p>\n\n\n\n<ul>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=tmtvlYWKkeQ\" target=\"_blank\" rel=\"noopener\">Stop Writing Specs. Let AI Interrogate You Instead<\/a> \ud83c\udfa5 &#8211; Gui Ferreira<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=lp9jwmBNMvA\" target=\"_blank\" rel=\"noopener\">Speed Up Your AI Development Workflow by 2x<\/a> \ud83c\udfa5 &#8211; Nick Chapsas<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=9fHk8p9N5z0\" target=\"_blank\" rel=\"noopener\">Testable Code Doesn&#8217;t Mean &#8220;Interfaces Everywhere&#8221;<\/a> \ud83c\udfa5 &#8211; CodeOpinion by Derek Comartin<\/li>\n\n\n\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=DAyZ_6KvpiM\" target=\"_blank\" rel=\"noopener\">2code ^ !2code [S2026E06] Inspector Roslyn is a CLI tool<\/a> \ud83c\udfa5 &#8211; FlashOWare by Stefan P\u00f6lz and Eva Ditzelm\u00fcller<\/li>\n\n\n\n<li><a href=\"https:\/\/www.telerik.com\/blogs\/building-instagram-style-like-animation-net-maui\" target=\"_blank\" rel=\"noopener\">Building an Instagram-Style Like Animation in .NET MAUI<\/a> &#8211; Leomaris Reyes<\/li>\n\n\n\n<li><a href=\"https:\/\/andrewlock.net\/removingbyte-array-allocations-in-dotnet-framework-using-readonlyspan-t\/\" target=\"_blank\" rel=\"noopener\">Removing byte[] allocations in .NET Framework using ReadOnlySpan&lt;T&gt;<\/a> &#8211; Andrew Lock<\/li>\n\n\n\n<li><a href=\"https:\/\/steven-giesel.com\/blogPost\/3acc78ff-5ae2-4be3-af7e-62bfcbf3fb6d\" target=\"_blank\" rel=\"noopener\">Source code generated string enums with exhaustion support<\/a> &#8211; Steven Giesel<\/li>\n\n\n\n<li><a href=\"https:\/\/www.woodruff.dev\/how-to-delete-and-update-millions-of-rows-in-ef-core-without-loading-a-single-entity\/\" target=\"_blank\" rel=\"noopener\">How to Delete and Update Millions of Rows in EF Core Without Loading a Single Entity<\/a> &#8211; Chris Woodruff<\/li>\n\n\n\n<li><a href=\"https:\/\/duendesoftware.com\/blog\/20260414-the-cookie-apocalypse-already-happened\" target=\"_blank\" rel=\"noopener\">The Cookie Apocalypse Already Happened<\/a> &#8211; Khalid Abuhakmeh<\/li>\n\n\n\n<li><a href=\"https:\/\/markheath.net\/post\/2026\/3\/30\/does-code-quality-still-matter\" target=\"_blank\" rel=\"noopener\">Does Code Quality Still Matter in the Age of AI-Assisted Coding?<\/a> &#8211; Mark Heath<\/li>\n\n\n\n<li><a href=\"https:\/\/www.meziantou.net\/url-pattern-matching-in-dotnet.htm\" target=\"_blank\" rel=\"noopener\">URL Pattern Matching in .NET<\/a> &#8211; G\u00e9rald Barr\u00e9<\/li>\n\n\n\n<li><a href=\"https:\/\/elbruno.com\/2026\/03\/30\/%f0%9f%9a%80-build-qr-codes-in-net-fast-with-elbruno-qrcodegenerator\/\" target=\"_blank\" rel=\"noopener\">Build QR Codes in .NET FAST with ElBruno.QRCodeGenerator<\/a> &#8211; Bruno Capuano<\/li>\n\n\n\n<li><a href=\"https:\/\/www.roundthecode.com\/dotnet-tutorials\/why-your-entity-framework-core-app-needs-query-filters\" target=\"_blank\" rel=\"noopener\">Why your Entity Framework Core app needs query filters<\/a> &#8211; David Grace<\/li>\n\n\n\n<li><a href=\"https:\/\/adrianbailador.github.io\/blog\/51-exception-security\/\" target=\"_blank\" rel=\"noopener\">What Your .NET Exceptions Are Telling Attackers (And How to Stop It)<\/a> &#8211; Adrian Bailador<\/li>\n\n\n\n<li><a href=\"https:\/\/www.textcontrol.com\/blog\/2026\/04\/03\/extracting-structured-table-data-from-docx-word-documents-in-csharp-dotnet-with-domain-aware-table-detection\/\" target=\"_blank\" rel=\"noopener\">Extracting Structured Table Data from DOCX Word Documents in C# .NET with Domain-Aware Table Detection<\/a> &#8211; Bjoern Meyer<\/li>\n\n\n\n<li><a href=\"https:\/\/dotnettips.com\/2026\/04\/05\/string-performance-avoid-unnecessary-conversions-with-stringbuilder\/\" target=\"_blank\" rel=\"noopener\">String Performance: Avoid Unnecessary Conversions with StringBuilder<\/a> &#8211; David McCarter<\/li>\n\n\n\n<li><a href=\"https:\/\/thenewstack.io\/ai-coding-tools-reckoning\/\" target=\"_blank\" rel=\"noopener\">\u201cI started to lose my ability to code\u201d: Developers grapple with the real cost of AI programming tools<\/a> &#8211; David Cassel<\/li>\n\n\n\n<li><a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/csharp-15-union-types\/\" target=\"_blank\" rel=\"noopener\">Explore union types in C# 15<\/a> &#8211; Bill Wagner<\/li>\n\n\n\n<li><a href=\"https:\/\/www.oreilly.com\/radar\/the-toolkit-pattern\/\" target=\"_blank\" rel=\"noopener\">The Toolkit Pattern<\/a> &#8211; Andrew Stellman<\/li>\n\n\n\n<li><a href=\"https:\/\/blog.lhotka.net\/2026\/04\/02\/Systems-Thinking\" target=\"_blank\" rel=\"noopener\">Systems Thinking<\/a> &#8211; Rocky Lhotka<\/li>\n\n\n\n<li><a href=\"https:\/\/www.telerik.com\/blogs\/getting-started-net-maui-speech-to-text-button-control\" target=\"_blank\" rel=\"noopener\">Getting Started with the .NET MAUI Speech-to-Text Button Control<\/a> &#8211; H\u00e9ctor P\u00e9rez<\/li>\n\n\n\n<li><a href=\"https:\/\/developersvoice.com\/blog\/dotnet\/mastering-distributed-rate-limiting-asp-net-core\/\" target=\"_blank\" rel=\"noopener\">Mastering ASP.NET Core Rate Limiting: From Basic Throttling to Distributed Token Buckets<\/a> &#8211; Sudhir Mangla<\/li>\n\n\n\n<li><a href=\"https:\/\/devblogs.microsoft.com\/agent-framework\/agent-skills-in-net-three-ways-to-author-one-provider-to-run-them\/\" target=\"_blank\" rel=\"noopener\">Agent Skills in .NET: Three Ways to Author, One Provider to Run Them<\/a> &#8211; Sergey Menshykh<\/li>\n\n\n\n<li><a href=\"https:\/\/blog.ndepend.com\/llm-chat-in-net-with-ichatclient-the-complete-guide\/\" target=\"_blank\" rel=\"noopener\">LLM Chat in .NET with IChatClient: The Complete Guide<\/a> &#8211; Patrick Smacchia<\/li>\n\n\n\n<li><a href=\"https:\/\/bartwullems.blogspot.com\/2026\/04\/microsoft-agent-frameworkbuilding-multi.html\" target=\"_blank\" rel=\"noopener\">Microsoft Agent Framework\u2013Building a multi-agent workflow with DevUI in .NET<\/a> &#8211; Bart Wullems<\/li>\n\n\n\n<li><a href=\"https:\/\/blog.elmah.io\/ef-core-query-translation-why-does-some-linq-never-become-sql\/\" target=\"_blank\" rel=\"noopener\">EF Core query translation: Why does some LINQ never become SQL?<\/a> &#8211; Ali Hamza Ansari<\/li>\n\n\n\n<li><a href=\"https:\/\/www.oreilly.com\/radar\/comprehension-debt-the-hidden-cost-of-ai-generated-code\/\" target=\"_blank\" rel=\"noopener\">Comprehension Debt: The Hidden Cost of AI-Generated Code<\/a> &#8211; Addy Osmani<\/li>\n\n\n\n<li><a href=\"https:\/\/www.devleader.ca\/2026\/04\/16\/how-to-implement-command-pattern-in-c-stepbystep-guide\" target=\"_blank\" rel=\"noopener\">How to Implement Command Pattern in C#: Step-by-Step Guide<\/a> &#8211; Nick Cosentino<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u2615 Coffee Break<\/h2>\n\n\n\n<p>Take a break to catch some fun social posts.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-9-16 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Idk what to type here rn\" width=\"422\" height=\"750\" src=\"https:\/\/www.youtube.com\/embed\/wn9122uuj_Q?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-9-16 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Modern Software Engineering\" width=\"422\" height=\"750\" src=\"https:\/\/www.youtube.com\/embed\/WCwD_1Qm218?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\uddde\ufe0f JetBrains News<\/h2>\n\n\n\n<p>What\u2019s going on at JetBrains? Check it out here:<\/p>\n\n\n\n<p><a href=\"https:\/\/blog.jetbrains.com\/dotnet\/2026\/05\/11\/the-resharper-2026-2-eap-any-ai-agent-in-visual-studio\/\">\u26d3\ufe0f\u200d\ud83d\udca5 Breaking AI vendor lock-in in Visual Studio \u26d3\ufe0f\u200d\ud83d\udca5<\/a><\/p>\n\n\n\n<p>ReSharper 2026.2 EAP 1 introduces Junie, JetBrains\u2019 LLM-agnostic AI coding agent, as the first step toward a more open AI ecosystem in Visual Studio. More about that <a href=\"https:\/\/blog.jetbrains.com\/dotnet\/2026\/05\/11\/the-resharper-2026-2-eap-any-ai-agent-in-visual-studio\/\"><em>here<\/em><\/a>.<\/p>\n\n\n\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/dotnet\/2026\/04\/09\/webinar-oss-power-ups-xenoatom-terminal-ui\/\">Webinar \u2013 OSS Power-Ups: XenoAtom.Terminal.UI<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/blog.jetbrains.com\/dotnet\/2026\/03\/31\/profile-dotnet-apps-without-restarting-monitoring-comes-to-resharper\/\">Profile .NET Apps Without Restarting: Monitoring Comes to ReSharper<\/a><\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p>\u2709\ufe0f Comments? Questions? Send us an <a href=\"mailto:dotnet-advocates@jetbrains.com\">email<\/a>.&nbsp;<\/p>\n\n\n\n<p align=\"center\"><a class=\"jb-download-button\" href=\"https:\/\/www.jetbrains.com\/lp\/dotinsights-monthly\/\" target=\"_blank\" rel=\"noopener\">Subscribe to dotInsights<\/a><\/p>\n","protected":false},"author":901,"featured_media":703869,"comment_status":"closed","ping_status":"closed","template":"","categories":[4992],"tags":[8363],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/dotnet\/703865"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/dotnet"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/types\/dotnet"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/users\/901"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/comments?post=703865"}],"version-history":[{"count":5,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/dotnet\/703865\/revisions"}],"predecessor-version":[{"id":706815,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/dotnet\/703865\/revisions\/706815"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/media\/703869"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/media?parent=703865"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/categories?post=703865"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/tags?post=703865"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/zh-hans\/wp-json\/wp\/v2\/cross-post-tag?post=703865"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}