Heleonix.Reflection
3.0.0
See the version list below for details.
dotnet add package Heleonix.Reflection --version 3.0.0
NuGet\Install-Package Heleonix.Reflection -Version 3.0.0
<PackageReference Include="Heleonix.Reflection" Version="3.0.0" />
paket add Heleonix.Reflection --version 3.0.0
#r "nuget: Heleonix.Reflection, 3.0.0"
// Install Heleonix.Reflection as a Cake Addin #addin nuget:?package=Heleonix.Reflection&version=3.0.0 // Install Heleonix.Reflection as a Cake Tool #tool nuget:?package=Heleonix.Reflection&version=3.0.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
API
Heleonix.Reflection.Reflector
Provides functionality for working with reflection.
Methods
public static MemberInfo[] GetInfo(object instance, Type type, string memberPath, Type[] parameterTypes = null, BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public)
Gets information about members.
Parameters
instance
: A root object.type
: A type of a root object. Ifinstance
is notnull
, then its type is used instead.memberPath
: A path to a member.parameterTypes
: Types of parameters to find methods or constructors. Ifnull
is passed, then types of parameters are ignored.bindingFlags
: Defines binding flags to find members.
Exceptions
TargetException
: An intermediate member on a path threw an exception. See inner exception for details.
Returns
Information about found members or an empty array if no members are found or they are not reachable or they are not accessible.
Example
var dt = DateTime.Now; var info = Reflector.GetInfo(instance: dt, type: null, memberPath: "TimeOfDay.Negate"); // info[0].Name == "Negate"; // info[0].MemberType == MemberTypes.Property;
public static bool IsStatic(PropertyInfo info)
Determines whether the specified property is static by its getter (if it is defined) or by its setter (if it is defined).
public static Type[] GetTypes(string simpleName)
Gets the types by a simple name (a name without namespace) in the calling assembly and in the assemblies loaded into the current domain.
public static string GetMemberPath<TObject>(Expression<Func<TObject, object>> memberPath)
Gets a path to a member which returns some type.
Example
var path = Reflector.GetMemberPath<DateTime>(dt => dt.TimeOfDay.Negate()); // path: "TimeOfDay.Negate"
public static string GetMemberPath<TObject>(Expression<Action<TObject>> memberPath)
Gets a path to a member which returns
void
.Example
var path = Reflector.GetMemberPath<List<int>>(list => list.Clear()); // path: "Clear"
public static string GetMemberPath(LambdaExpression memberPath)
Gets a path to a member using the specified (probably dynamically built) expression.
Returns
A name of a member or an empty string if
expression
isnull
.public static bool Get<TReturn>(object instance, Type type, string memberPath, out TReturn value, BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public)
Gets a value by the provided path.
Parameters
instance
: A root object.type
: A type of a root object. Ifinstance
is notnull
, then its type is used instead.memberPath
: A path to a member.value
: A gotten value.bindingFlags
: Binding flags to find members.
Exceptions
TargetException
: Target thrown an exception during execution. See inner exception for details.
Returns
true
in case of success, otherwisefalse
ifmemberPath
isnull
or empty orinstance
isnull
andtype
isnull
or a target member or one of intermediate members was not found or a member is not static and its container is null or a target member or an intermediate member is neitherPropertyInfo
norFieldInfo
or a target value is not of typeTReturn
.Example
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 static bool Set(object instance, Type type, string memberPath, object value, BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public)
Sets a provided value by the provided path.
Parameters
instance
: A root object.type
: A type of a root object. Ifinstance
is notnull
, then its type is used instead.memberPath
: A path to a member.value
: A value to be set.bindingFlags
: Binding flags to find members.
Exceptions
- see exceptions of
PropertyInfo.SetValue(object, object, object[])
Returns
true
in case of success, otherwisefalse
ifmemberPath
isnull
or empty orinstance
isnull
andtype
isnull
or a target member or one of intermediate members was not found or a member is not static and its container is null or a target member or an intermediate member is neitherPropertyInfo
norFieldInfo
.Example
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;
public static bool SetCoerced(object instance, Type type, string memberPath, object value, BindingFlags bindingFlags = DefaultBindingFlags)
Sets a provided value by the provided path with coercion into the target member type.Parameters
instance
: A root object.type
: A type of a root object. Ifinstance
is notnull
, then its type is used instead.memberPath
: A path to a member.value
: A value to be set.bindingFlags
: Binding flags to find members.
Exceptions
- see exceptions of
PropertyInfo.SetValue(object, object, object[])
Returns
true
in case of success, otherwisefalse
ifmemberPath
isnull
or empty orinstance
isnull
andtype
isnull
or a target member or one of intermediate members was not found or a member is not static and its container is null or a target member or an intermediate member is neitherPropertyInfo
norFieldInfo
.Example
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.
public static bool Invoke<TReturn>(object instance, Type type, string memberPath, Type[] parameterTypes, out TReturn returnValue, BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public, params object[] arguments)
Invokes a method or constructor by the provided path. Use "ctor" to invoke constructors, i.e."Item.SubItem.ctor".
Parameters
instance
: A root object.type
: A type of a root object.instance
: is notnull
, then its runtime type is used instead.memberPath
: A path to a member to invoke.parameterTypes
: Types of parameters to find a method by. Passnull
to ignore parameters, or an empty array for parameterless methods.returnValue
: A value to be returned if a member is not void.bindingFlags
: Binding flags to find members.arguments
: Arguments to be passed into a member to invoke.
Exceptions
TargetException
: Target thrown an exception during execution. See inner exception for details.
Returns
true
in case of success, otherwisefalse
ifmemberPath
isnull
or empty orinstance
isnull
andtype
isnull
or a target member or one of intermediate members was not found or an intermediate member is neitherPropertyInfo
norFieldInfo
or an intermediate member is not static and its container is null or a target member is notMethodBase
or a target value is not of typeTReturn
.Example
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;
public static Func<TObject, TReturn> CreateGetter<TObject, TReturn>(Expression<Func<TObject, TReturn>> memberPath)
Creates a getter. Works with exactly specified types without conversion. This is the fastest implementation.
Parameters
memberPath
: The path to a member.
Returns
A compiled delegate to get a value or
null
if thememberPath
isnull
.Example
var getter = Reflector.CreateGetter(dt => dt.Date.Month); var value = getter(DateTime.Now); // value == DateTime.Now.Date.Month;
public static Func<TObject, TReturn> CreateGetter<TObject, TReturn>(string memberPath, Type containerType = null)
Creates a getter. Can create getters with any convertable types for polimorphic usage.
Parameters
memberPath
: The path to a member.containerType
: A type of a container's object which contains the member. If null is specified, thenTObject
is used without conversion.
Returns
A compiled delegate to get a value or
null
if thememberPath
isnull
or empty.Example
var getter = Reflector.CreateGetter{object, object}("Date.Month", typeof(DateTime)); var value = getter(DateTime.Now); // value == DateTime.Now.Date.Month;
public static Action<TObject, TValue> CreateSetter<TObject, TValue>(Expression<Func<TObject, TValue>> memberPath)
Creates the setter. Works with exactly specified types without conversion. This is the fastest implementation.
Parameters
memberPath
: The path to a member.
Returns
A compiled delegate to set a value or
null
ifmemberPath
isnull
.Example
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 static Action<TObject, TValue> CreateSetter<TObject, TValue>(string memberPath, Type containerType = null)
Creates a setter. Can create setters with any convertable types for polimorphic usage.
Parameters
memberPath
: The path to a member.containerType
: A type of a container's object which contains the member. If null is specified, thenTObject
is used without conversion.
Returns
A compiled delegate to set a value or
null
if thememberPath
isnull
or empty.Example
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;
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.
Decommission of netstandard1.6;
Implementation of coersing values in the SetCoerced method.