Files
caliverse_server/ServerBase/Meta/MetaValidation/MethodInfoExtentions.cs
2025-05-01 07:20:41 +09:00

42 lines
976 B
C#

using System.Linq.Expressions;
using System.Reflection;
namespace ServerBase;
public static class MethodInfoExtentions
{
public static TDelegate compile<TDelegate>(MethodInfo mi)
{
ParameterExpression? @this = null;
if (!mi.IsStatic)
{
@this = Expression.Parameter(mi.DeclaringType!, "this");
}
var parameters = new List<ParameterExpression>();
if (@this != null)
{
parameters.Add(@this);
}
foreach (var parameter in mi.GetParameters())
{
parameters.Add(Expression.Parameter(parameter.ParameterType, parameter.Name));
}
Expression? call = null;
if (@this != null)
{
call = Expression.Call(@this, mi, parameters.Skip(1));
}
else
{
call = Expression.Call(mi, parameters);
}
return Expression.Lambda<TDelegate>(call, parameters).Compile();
}
}