| 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