我已经为 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;
}
目前,它只接受在模型属性(返回对象)上定义的 LambdaExpressions 数组,并将它们的表达式文本添加到一个字符串中,该字符串随后由该函数返回。问题是,对于字符串类型的属性,它工作正常,但对于 int 属性,它返回空字符串作为表达式文本。原因是对于返回 int 值的表达式,表达式的主体如下图所示:
但是对于字符串,它就像
我认为转换方法是返回整数值的表达式导致空字符串作为表达式文本返回。我怎样才能解决这个问题?我只需要原始表达式文本,即 Convert(x.id)
的 Id 和 x.Name
的 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;
}
您可能需要考虑进行额外的检查,就好像 Convert 不包含 memberexpression 一样,您将得到一个转换错误。
关于c# - 获取 lambda 表达式的表达式文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7445911/