https://github.com/usausa/member-accessor-generator
Fast property accessor generator.
https://github.com/usausa/member-accessor-generator
accessor codegenerator csharp dotnet source-generator source-generators sourcegenerator
Last synced: 6 months ago
JSON representation
Fast property accessor generator.
- Host: GitHub
- URL: https://github.com/usausa/member-accessor-generator
- Owner: usausa
- License: mit
- Created: 2024-04-11T08:53:49.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-09-29T10:07:07.000Z (7 months ago)
- Last Synced: 2024-11-03T09:08:35.833Z (6 months ago)
- Topics: accessor, codegenerator, csharp, dotnet, source-generator, source-generators, sourcegenerator
- Language: C#
- Homepage:
- Size: 35.2 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- RSCG_Examples - https://github.com/usausa/member-accessor-generator
README
# MemberAccessorGenerator
[](https://www.nuget.org/packages/MemberAccessorGenerator)
## Reference
Add reference to MemberAccessorGenerator and MemberAccessorGenerator.SourceGenerator to csproj.
```xml
all
runtime; build; native; contentfiles; analyzers; buildtransitive
```## MemberAccessor
### Source
```csharp
[GenerateAccessor]
public partial class Data
{
public int Id { get; set; }public string Name { get; set; } = default!;
}
``````csharp
var accessorFactory = AccessorRegistry.FindFactory();
var getter = accessorFactory.CreateGetter(nameof(Data.Id));
var setter = accessorFactory.CreateSetter(nameof(Data.Id));var data = new Data();
setter(data, 123);
var id = getter(data);
```## Benchmark
```
BenchmarkDotNet v0.13.12, Windows 11 (10.0.22631.3235/23H2/2023Update/SunValley3)
AMD Ryzen 9 5900X, 1 CPU, 24 logical and 12 physical cores
.NET SDK 8.0.204
[Host] : .NET 8.0.4 (8.0.424.16909), X64 RyuJIT AVX2
DefaultJob : .NET 8.0.4 (8.0.424.16909), X64 RyuJIT AVX2
```
| Method | Mean | Error | StdDev | Min | Max | P90 | Code Size | Allocated |
|----------------- |----------:|----------:|----------:|----------:|----------:|----------:|----------:|----------:|
| DirectGetter | 0.2233 ns | 0.0044 ns | 0.0045 ns | 0.2157 ns | 0.2294 ns | 0.2282 ns | 12 B | - |
| ExpressionGetter | 1.1028 ns | 0.0205 ns | 0.0201 ns | 1.0798 ns | 1.1326 ns | 1.1289 ns | 57 B | - |
| GeneratorGetter | 0.2975 ns | 0.0035 ns | 0.0033 ns | 0.2939 ns | 0.3038 ns | 0.3016 ns | 75 B | - |
| DirectSetter | 0.2206 ns | 0.0023 ns | 0.0022 ns | 0.2176 ns | 0.2242 ns | 0.2236 ns | 31 B | - |
| ExpressionSetter | 1.3123 ns | 0.0217 ns | 0.0203 ns | 1.2948 ns | 1.3487 ns | 1.3466 ns | 60 B | - |
| GeneratorSetter | 0.4418 ns | 0.0063 ns | 0.0059 ns | 0.4328 ns | 0.4494 ns | 0.4484 ns | 83 B | - |