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" />
paket add ExpressionDelegates.Generation --version 1.0.0
#r "nuget: ExpressionDelegates.Generation, 1.0.0"
// Install ExpressionDelegates.Generation as a Cake Addin #addin nuget:?package=ExpressionDelegates.Generation&version=1.0.0 // Install ExpressionDelegates.Generation as a Cake Tool #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
private
orprotected
classes and members, only forinternal
andpublic
No delegates for methods or constructors with
ref
parametersNo 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 | 310 | 11/12/2020 |