ObjectTreeWalker 0.11.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package ObjectTreeWalker --version 0.11.0                
NuGet\Install-Package ObjectTreeWalker -Version 0.11.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ObjectTreeWalker" Version="0.11.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add ObjectTreeWalker --version 0.11.0                
#r "nuget: ObjectTreeWalker, 0.11.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// 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                

Build & Test

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

MIT License

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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