![]() |
VOOZH | about |
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" />Directory.Packages.props
<PackageReference Include="ExpressionDelegates.Generation" />Project file
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.0Install as a Cake Addin
#tool nuget:?package=ExpressionDelegates.Generation&version=1.0.0Install as a Cake Tool
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)
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.
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
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"
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 or protected classes and members, only for internal and public
No delegates for methods or constructors with ref parameters
No 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.
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 560 | 11/12/2020 |