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 108 4/25/2024
0.11.0 73 4/25/2024
0.10.18 312 8/21/2023
0.10.14 129 7/6/2023
0.10.13 122 5/27/2023
0.10.11 164 4/4/2023
0.10.8 375 1/14/2023
0.10.7 244 1/14/2023
0.10.5 256 12/25/2022
0.10.4 254 12/24/2022
0.10.3 1,901 12/3/2022
0.10.2 282 12/3/2022
0.9.4 286 11/29/2022
0.9.3 266 11/29/2022
0.9.2 449 11/7/2022
0.9.1 397 10/20/2022
0.9.0 386 10/19/2022
0.8.3 363 10/19/2022
0.8.2 415 9/26/2022
0.8.1 391 9/26/2022
0.8.0 365 9/26/2022
0.7.1 387 9/24/2022
0.7.0 510 9/24/2022
0.6.0 409 9/24/2022
0.5.3 385 9/24/2022
0.5.2 371 9/24/2022
0.4.1 421 9/17/2022
0.3.3 409 9/17/2022
0.3.1 414 9/17/2022