RSCG – AutoDeconstruct
name | AutoDeconstruct |
nuget | https://www.nuget.org/packages/AutoDeconstruct |
link | https://github.com/JasonBock/AutoDeconstruct/blob/main/docs/Overview.md |
author | Jason Bock |
Automatically add deconstruct for all types in an assembly
This is how you can use AutoDeconstruct .
The code that you start with is
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <PackageReference Include="AutoDeconstruct" Version="1.0.0" /> </ItemGroup> <PropertyGroup> <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles> <CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath> </PropertyGroup> </Project>
The code that you will use is
// See https://aka.ms/new-console-template for more information Console.WriteLine("Hello, World!"); var p = new Person(); p.FirstName = "Test"; p.LastName = "Ignat"; var (_, l, _ ) = p; Console.WriteLine($"Last name is {l}");
// See https://aka.ms/new-console-template for more information using AutoDeconstruct; public class Person { public string? FirstName { get; set; } public string? LastName { get; set; } public string? Title { get; set; } } [NoAutoDeconstruct] public class TestPerson { public string? FirstName { get; set; } public string? LastName { get; set; } public string? Title { get; set; } }
The code that is generated is
#nullable enable public static partial class PersonExtensions { public static void Deconstruct(this global::Person @self, out string? @firstName, out string? @lastName, out string? @title) { global::System.ArgumentNullException.ThrowIfNull(@self); (@firstName, @lastName, @title) = (@self.FirstName, @self.LastName, @self.Title); } }
Code and pdf at
https://ignatandrei.github.io/RSCG_Examples/v2/docs/AutoDeconstruct
Leave a Reply