Skip to main content

MemberAccessor by Yamaokuno

Nuget / site data

Nuget GitHub last commit GitHub Repo stars

Details

Info

info

Name: MemberAccessor

Member accessor code generator.

Author: Yamaokuno

NuGet: https://www.nuget.org/packages/BunnyTail.MemberAccessor/

You can find more details at https://github.com/usausa/member-accessor-generator

Source : https://github.com/usausa/member-accessor-generator

Original Readme

note

BunnyTail.MemberAccessor

NuGet

Reference

Add reference to BunnyTail.MemberAccessor to csproj.

  <ItemGroup>
<PackageReference Include="BunnyTail.MemberAccessor" Version="1.2.0" />
</ItemGroup>

MemberAccessor

Source

using BunnyTail.MemberAccessor;

[GenerateAccessor]
public partial class Data
{
public int Id { get; set; }

public string Name { get; set; } = default!;
}
using BunnyTail.MemberAccessor;

var accessorFactory = AccessorRegistry.FindFactory<Data>();
var getter = accessorFactory.CreateGetter<int>(nameof(Data.Id));
var setter = accessorFactory.CreateSetter<int>(nameof(Data.Id));

var data = new Data();
setter(data, 123);
var id = getter(data);

Benchmark

BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.2894)
AMD Ryzen 9 5900X, 1 CPU, 24 logical and 12 physical cores
.NET SDK 9.0.102
[Host] : .NET 9.0.1 (9.0.124.61010), X64 RyuJIT AVX2
DefaultJob : .NET 9.0.1 (9.0.124.61010), X64 RyuJIT AVX2
MethodMeanErrorStdDevMinMaxP90Code SizeAllocated
DirectGetter0.2180 ns0.0033 ns0.0027 ns0.2144 ns0.2231 ns0.2222 ns10 B-
ExpressionGetter1.0868 ns0.0143 ns0.0134 ns1.0737 ns1.1127 ns1.1095 ns54 B-
GeneratorGetter0.2244 ns0.0020 ns0.0019 ns0.2219 ns0.2283 ns0.2269 ns72 B-
DirectSetter0.2155 ns0.0009 ns0.0008 ns0.2138 ns0.2167 ns0.2165 ns28 B-
ExpressionSetter1.0956 ns0.0219 ns0.0225 ns1.0716 ns1.1393 ns1.1260 ns57 B-
GeneratorSetter0.4306 ns0.0014 ns0.0012 ns0.4284 ns0.4328 ns0.4323 ns80 B-

About

note

Generate getter and setter for class members.

How to use

Example ( source csproj, source files )

This is the CSharp Project that references MemberAccessor

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="BunnyTail.MemberAccessor" Version="1.2.0" />
</ItemGroup>
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
</Project>

Generated Files

Those are taken from $(BaseIntermediateOutputPath)\GX

// <auto-generated />
#nullable enable

internal static class AccessorFactoryInitializer
{
[global::System.Runtime.CompilerServices.ModuleInitializer]
public static void Initialize()
{
global::BunnyTail.MemberAccessor.AccessorRegistry.RegisterFactory(typeof(global::DemoMember.Person), typeof(global::DemoMember.Person_AccessorFactory));
}
}

Usefull

Download Example (.NET C# )

Share MemberAccessor

https://ignatandrei.github.io/RSCG_Examples/v2/docs/MemberAccessor

In the same category (EnhancementClass) - 26 other generators

ApparatusAOT

AspectGenerator

CommonCodeGenerator

DudNet

Enhanced.GetTypes

FastGenericNew

HsuSgSync

Immutype

Ling.Audit

Lombok.NET

M31.FluentAPI

MemoryPack

Meziantou.Polyfill

Microsoft.Extensions.Logging

Microsoft.Extensions.Options.Generators.OptionsValidatorGenerator

Microsoft.Interop.JavaScript.JSImportGenerator

OptionToStringGenerator

QueryStringGenerator

RSCG_Decorator

RSCG_UtilityTypes

StaticReflection

SyncMethodGenerator

System.Runtime.InteropServices

System.Text.RegularExpressions

TelemetryLogging

ThisClass