ObjectTreeWalker 0.11.0
See the version list below for details.
dotnet add package ObjectTreeWalker --version 0.11.0
NuGet\Install-Package ObjectTreeWalker -Version 0.11.0
<PackageReference Include="ObjectTreeWalker" Version="0.11.0" />
paket add ObjectTreeWalker --version 0.11.0
#r "nuget: ObjectTreeWalker, 0.11.0"
// Install ObjectTreeWalker as a Cake Addin #addin nuget:?package=ObjectTreeWalker&version=0.11.0 // Install ObjectTreeWalker as a Cake Tool #tool nuget:?package=ObjectTreeWalker&version=0.11.0
ObjectGraphWalker
ObjectGraphWalker is a powerful utility library that enables seamless traversal over C# object properties and fields, Node.js style. Designed with performance and flexibility in mind, it leverages dynamic code generation and caching to provide efficient traversal capabilities.
Features
- Fast Traversal: Utilizes dynamic code generation to create accessors that speed up traversal.
- Flexible Filtering: Allows custom predicates to include or exclude specific members during traversal.
- Support for Various Types: Works with both value and reference types, including generics and embedded structs.
- Well-Tested: Includes comprehensive tests to ensure reliability and correctness.
Installation
Simply install the NuGet Package
Usage Examples
Simple Example
A basic example that demonstrates how to traverse an object and access its properties:
var someObject = new SomeObject();
var iterator = new ObjectMemberIterator();
iterator.Traverse(someObject, (in MemberAccessor accessor) =>
{
var propertyValue = accessor.GetValue();
prop.SetValue(/* some other value */);
});
Advanced Example
An advanced example that shows how to use predicates to filter members and control the traversal behavior:
var someObject = new SomeObject();
var iterator = new ObjectMemberIterator();
iterator.Traverse(someObject, (in MemberAccessor accessor) =>
{
var propertyValue = accessor.GetValue();
prop.SetValue(/* some other value */);
//filtering for selective iteration is a simple lambda
}, (in MemberAccessor accessor) => accessor.Name != "Foo1" && accessor.MemberType != MemberType.Property);
Notes
- The iterator will read public and private properties and fields but will ignore any static members of the object.
- The iterator will ignore backing fields for "auto properties" and any compiler-generated fields such as closures (unless specified in the constructor).
- While the iterator is well-tested, there may be some bugs. If you encounter any issues, please open an issue with a description.
Contributing
Any contributions are welcome 😃
License
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- CodeProject.ObjectPool (>= 6.5.0)
- CodeProject.ObjectPool.MicrosoftExtensionsAdapter (>= 6.5.0)
- Sigil (>= 5.0.0)
- System.Memory (>= 4.5.5)
-
net8.0
- CodeProject.ObjectPool (>= 6.5.0)
- CodeProject.ObjectPool.MicrosoftExtensionsAdapter (>= 6.5.0)
- Sigil (>= 5.0.0)
- System.Memory (>= 4.5.5)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on ObjectTreeWalker:
Package | Downloads |
---|---|
RoguelikeToolkit.Entities
Package Description |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
0.11.1 | 209 | 4/25/2024 |
0.11.0 | 111 | 4/25/2024 |
0.10.18 | 546 | 8/21/2023 |
0.10.14 | 158 | 7/6/2023 |
0.10.13 | 153 | 5/27/2023 |
0.10.11 | 194 | 4/4/2023 |
0.10.8 | 409 | 1/14/2023 |
0.10.7 | 277 | 1/14/2023 |
0.10.5 | 288 | 12/25/2022 |
0.10.4 | 292 | 12/24/2022 |
0.10.3 | 1,978 | 12/3/2022 |
0.10.2 | 312 | 12/3/2022 |
0.9.4 | 316 | 11/29/2022 |
0.9.3 | 294 | 11/29/2022 |
0.9.2 | 487 | 11/7/2022 |
0.9.1 | 429 | 10/20/2022 |
0.9.0 | 417 | 10/19/2022 |
0.8.3 | 396 | 10/19/2022 |
0.8.2 | 459 | 9/26/2022 |
0.8.1 | 427 | 9/26/2022 |
0.8.0 | 400 | 9/26/2022 |
0.7.1 | 420 | 9/24/2022 |
0.7.0 | 554 | 9/24/2022 |
0.6.0 | 442 | 9/24/2022 |
0.5.3 | 418 | 9/24/2022 |
0.5.2 | 406 | 9/24/2022 |
0.4.1 | 468 | 9/17/2022 |
0.3.3 | 447 | 9/17/2022 |
0.3.1 | 451 | 9/17/2022 |
:bug: Bug Fixes:
- [`bbfc4ca`](https://github.com/myarichuk/Library.Template/commit/bbfc4ca34650fca71e86bbaa3c177ca892bccf85) - ensure release is created (add missing parameter) *(commit by [@myarichuk](https://github.com/myarichuk))*
[v1.0.10.0]: https://github.com/myarichuk/Library.Template/compare/v1.0.9.0...v1.0.10.0