Muh*_*hid 2 c# asp.net-mvc lambda c#-4.0 asp.net-mvc-3
我为HtmlHelper类编写了一个简单的扩展方法
public static string GetExpressionNames<TModel>(this HtmlHelper<TModel> helper,params Expression<Func<TModel,object>>[] args) where TModel:class
{
string returnStr = string.Empty;
int i = 0;
foreach (var x in args)
{
returnStr += (++i).ToString() + ExpressionHelper.GetExpressionText(x) + "<br/>";
}
return returnStr;
}
Run Code Online (Sandbox Code Playgroud)
目前,它只是接受在Model属性(返回对象)上定义的LambdaExpressions数组,并将它们的表达式文本添加到一个字符串中,然后由该函数返回.问题是,对于字符串类型属性,它工作正常,但对于int属性,它将空字符串作为表达式文本返回.原因是对于返回int值的表达式,表达式的主体看起来像下面的图像:
但对于字符串,它就像
我认为convert方法是返回积分值的表达式,导致空字符串作为Expression文本返回.我怎样才能解决这个问题?我只需要原始表达文本,即Id for Convert(x.id)和Name for x.Name; 如何在后端处理它并不重要.
我有这种扩展方法为我做
public static string GetMemberName(this LambdaExpression expr) {
var lexpr = expr;
MemberExpression mexpr = null;
if (lexpr.Body is MemberExpression) {
mexpr = (MemberExpression) lexpr.Body;
} else if (lexpr.Body is UnaryExpression) {
mexpr = (MemberExpression) ((UnaryExpression) lexpr.Body).Operand;
}
if (mexpr == null) {
return null;
}
return mexpr.Member.Name;
}
Run Code Online (Sandbox Code Playgroud)
您可能需要考虑添加额外的检查,就像转换不包含元素表示一样,您将收到强制转换错误.