diff options
author | Ben Harris <ben@tilde.team> | 2020-05-06 21:27:36 -0400 |
---|---|---|
committer | Ben Harris <ben@tilde.team> | 2020-05-06 21:27:36 -0400 |
commit | f6f3e7e0c535aaf3627f815dd63970aec6c73f75 (patch) | |
tree | 54b7790cb6ebcc26e02d97f24ae8d09fc67163de /IrcStates/Extensions.cs | |
parent | 0117d9d9a0a395166e15c0996f87af823928d011 (diff) |
start impl
Diffstat (limited to 'IrcStates/Extensions.cs')
-rw-r--r-- | IrcStates/Extensions.cs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/IrcStates/Extensions.cs b/IrcStates/Extensions.cs new file mode 100644 index 0000000..dde0edb --- /dev/null +++ b/IrcStates/Extensions.cs @@ -0,0 +1,32 @@ +using System; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; + +namespace IrcStates +{ + public static class Extensions + { + public static Delegate CreateDelegate(this MethodInfo methodInfo, object target) + { + if (methodInfo == null) return null; + + var types = methodInfo.GetParameters().Select(p => p.ParameterType); + + Func<Type[], Type> getType; + if (methodInfo.ReturnType == typeof(void)) + { + getType = Expression.GetActionType; + } + else + { + getType = Expression.GetFuncType; + types = types.Concat(new[] {methodInfo.ReturnType}); + } + + return methodInfo.IsStatic + ? Delegate.CreateDelegate(getType(types.ToArray()), methodInfo) + : Delegate.CreateDelegate(getType(types.ToArray()), target, methodInfo); + } + } +} |