代码拉取完成,页面将自动刷新
using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
namespace TypedMvcActionHelper
{
public class ExpressionEvaluation
{
public static object GetExpressionValue(Expression expression, ReadOnlyCollection<ParameterExpression> parameters, object[] parameterValues)
{
switch (expression.NodeType)
{
case ExpressionType.Constant:
return ((ConstantExpression)expression).Value;
case ExpressionType.MemberAccess:
{
var me = (MemberExpression)expression;
object obj = (me.Expression != null ? GetExpressionValue(me.Expression, parameters, parameterValues) : null);
if (me.Member is FieldInfo)
return ((FieldInfo)me.Member).GetValue(obj);
else if (me.Member is PropertyInfo)
return ((PropertyInfo)me.Member).GetValue(obj, null);
else
throw new NotSupportedException("Unsupported member access type");
}
case ExpressionType.Parameter:
{
var pe = (ParameterExpression)expression;
for (int i = 0; i < parameters.Count; i++)
{
if (pe.Name == parameters[i].Name)
return parameterValues[i];
}
throw new InvalidOperationException("Invalid parameter");
}
case ExpressionType.Convert:
{
var ue = (UnaryExpression)expression;
var operand = GetExpressionValue(ue.Operand, parameters, parameterValues);
if (ue.Type.IsInstanceOfType(operand))
{
return operand;
}
if (ue.Type.IsGenericType && ue.Type.GetGenericTypeDefinition() == typeof(Nullable<>) && ue.Type.GetGenericArguments()[0] == ue.Operand.Type)
return Activator.CreateInstance(typeof(Nullable<>).MakeGenericType(ue.Operand.Type), operand);
else
return Convert.ChangeType(operand, ue.Type);
}
case ExpressionType.Call:
{
var ce = (MethodCallExpression)expression;
var target = (ce.Object != null ? GetExpressionValue(ce.Object, parameters, parameterValues) : null);
var args = ce.Arguments.Select(a => GetExpressionValue(a, parameters, parameterValues)).ToArray();
return ce.Method.Invoke(target, args);
}
default:
var lambda = Expression.Lambda(expression, parameters).Compile();
return lambda.DynamicInvoke(parameterValues);
//throw new InvalidOperationException("unsupported expression {0}".FormatWith(expression.ToString()));
}
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。