Heleonix.Reflection
3.2.0
dotnet add package Heleonix.Reflection --version 3.2.0
NuGet\Install-Package Heleonix.Reflection -Version 3.2.0
<PackageReference Include="Heleonix.Reflection" Version="3.2.0" />
paket add Heleonix.Reflection --version 3.2.0
#r "nuget: Heleonix.Reflection, 3.2.0"
// Install Heleonix.Reflection as a Cake Addin #addin nuget:?package=Heleonix.Reflection&version=3.2.0 // Install Heleonix.Reflection as a Cake Tool #tool nuget:?package=Heleonix.Reflection&version=3.2.0
Heleonix.Reflection
Provides reflection functionality to search and invoke type members, search types, generate delegates etc.
Install
https://www.nuget.org/packages/Heleonix.Reflection
Documentation
Examples
var dt = DateTime.Now;
var info = Reflector.GetInfo(instance: dt, type: null, memberPath: "TimeOfDay.Negate");
// info[0].Name == "Negate";
// info[0].MemberType == MemberTypes.Property;
var path = Reflector.GetMemberPath<DateTime>(dt => dt.TimeOfDay.Negate());
// path: "TimeOfDay.Negate"
var success = Reflector.Get(DateTime.Now, null, "TimeOfDay.Hours", out int value);
// success == true;
// value == DateTime.Now.TimeOfDay.Hours;
or
var success = Reflector.Get(typeof(int), null, "CustomAttributes[0].AttributeType", out int value);
// success == true;
// value == typeof(int).CustomAttributes.First().AttributeType;
or
var success = Reflector.Get(typeof(int), null, "CustomAttributes[0]", out int value);
// success == true;
// value == typeof(int).CustomAttributes.First();
public class Root
{
public Child Child { get; set; } = new Child();
public Child[] Children { get; set; } = new Child[] { new Child(), new Child() };
}
public class Child { public int Value { get; set; } }
var root = new Root();
var success1 = Reflector.Set(root, null, "Child.Value", 111);
var success2 = Reflector.Set(root, null, "Children[0].Value", 222);
var success3 = Reflector.Set(root, null, "Children[1]", new Child() { Value = 333 });
// success1 == true;
// success2 == true;
// success3 == true;
// root.Child.Value == 111;
// root.Children[0].Value == 222;
// root.Children[1].Value == 333;
var success = Reflector.Invoke(DateTime.Now, null, "Date.AddYears", new[] { typeof(int) }, out DateTime result, arguments: 10);
// success == true;
// result.Year == DateTime.Now.Date.Year + 10;
var getter = Reflector.CreateGetter(dt => dt.Date.Month);
var value = getter(DateTime.Now);
// value == DateTime.Now.Date.Month;
public class Root { public Child Child { get; set; } = new Child(); }
public class Child { public int Value { get; set; } }
var setter = Reflector.CreateSetter{Root, int}(r => r.Child.Value);
var root = new Root();
setter(root, 12345);
// root.Child.Value == 12345;
public class Root { public Child Child { get; set; } = new Child(); }
public class Child { public int Value { get; set; } }
var setter = Reflector.CreateSetter{Root, int}("Child.Value", typeof(Root));
var root = new Root();
setter(root, 12345);
// root.Child.Value == 12345;
Contribution Guideline
Create a fork from the main repository
Implement whatever is needed
Create a Pull Request. Make sure the assigned Checks pass successfully. You can watch the progress in the PR: .NET GitHub workflows
Request review from the code owner
Once approved, merge your Pull Request via Squash and merge
IMPORTANT
While merging, enter a Conventional Commits commit message. This commit message will be used in automatically generated Github Release Notes and NuGet Release NotesMonitor the Release: .NET / NuGet GitHub workflow to make sure your changes are delivered successfully
In case of any issues, please contact heleonix.sln@gmail.com
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. 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 was computed. 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. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
"3.2.0 (5/7/2024)
New Features
- Support of dictionary indexers to get values by keys instead of KeyValuePair instances.
Bug Fixes
- Added examples of dictionaries usage."