ExpressionDelegates.Generation
1.0.0
dotnet add package ExpressionDelegates.Generation --version 1.0.0
NuGet\Install-Package ExpressionDelegates.Generation -Version 1.0.0
<PackageReference Include="ExpressionDelegates.Generation" Version="1.0.0" />
<PackageVersion Include="ExpressionDelegates.Generation" Version="1.0.0" />
<PackageReference Include="ExpressionDelegates.Generation" />
paket add ExpressionDelegates.Generation --version 1.0.0
#r "nuget: ExpressionDelegates.Generation, 1.0.0"
#:package ExpressionDelegates.Generation@1.0.0
#addin nuget:?package=ExpressionDelegates.Generation&version=1.0.0
#tool nuget:?package=ExpressionDelegates.Generation&version=1.0.0
Usage
API is very simple:
ExpressionDelegates.Accessors.Find(string signature).Getter(object targetObject)
ExpressionDelegates.Accessors.Find(MemberInfo member).Setter(object targetObject, object value)
ExpressionDelegates.Methods.Find(string signature).Invoke(object targetObject, params object[] args)
ExpressionDelegates.Methods.Find(MethodInfo method).Invoke(object targetObject, params object[] args)
ExpressionDelegates.Constructors.Find(string signature ).Invoke(params object[] args)
ExpressionDelegates.Constructors.Find(Constructors constructor).Invoke(params object[] args)
Property/Field getter and setter delegates
Expression<Func<string, int>> expression = s => s.Length;
MemberInfo accessorInfo = ((MemberExpression)expression.Body).Member;
Accessor lengthAccessor = ExpressionDelegates.Accessors.Find(accessorInfo);
// or
lengthAccessor = ExpressionDelegates.Accessors.Find("System.String.Length");
var value = lengthAccessor.Get("17 letters string");
// value == 17
If property/field is read-only, Accessor.Set will be null.
If property is write-only, Accessor.Get will be null.
Method delegates
Expression<Func<string, char, bool>> expression = (s, c) => s.Contains(c);
MethodInfo methodInfo = ((MethodCallExpression)expression.Body).Method;
Method containsMethod = ExpressionDelegates.Methods.Find(methodInfo);
// or
containsMethod = ExpressionDelegates.Methods.Find("System.String.Contains(System.Char)");
var value = containsMethod.Invoke("Hello", 'e');
// value == true
Constructor delegates
Expression<Func<char, int, string>> expression = (c, i) => new string(c, i);
ConstructorInfo ctorInfo = ((NewExpression)expression.Body).Constructor;
Constructor stringCtor = ExpressionDelegates.Constructors.Find(ctorInfo);
// or
stringCtor = ExpressionDelegates.Constructors.Find("System.String.String(System.Char, System.Int32)");
var value = stringCtor.Invoke('c', 5);
// value == "ccccc"
Possibilities and Limitations
Parameters for the delegates, their count and type checking are up to you. InvalidCastException is thrown in case of using wrong parameters for a delegate signature. IndexOutOfRangeException is thrown for an unexpected parameter count.
No delegates for
privateorprotectedclasses and members, only forinternalandpublicNo delegates for methods or constructors with
refparametersNo delegates for anonymous types (not sure if needed)
Static members are supported
Generics are supported
Nested classes are supported
Dynamic properties/fields are supported
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- ExpressionDelegates.Base (>= 1.0.0)
- ModuleInit.Fody (>= 2.1.1)
- Uno.SourceGenerationTasks (>= 3.0.0-dev.18)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 471 | 11/12/2020 |