c# - 如何从表达式属性中获取名称?

标签 c# .net lambda expression

Possible Duplicates:
Get method name and type using lambda expression
Can I use Expression<Func<T, bool>> and reliably see which properties are referenced in the Func<T, bool>?

嗨,

我想要一个方法,我可以像这样使用

<% Html.TextBoxFor(x=>x.Property, Helper.GetAttributes<ViewModel>(x=>x.PropertyA)) %>

方法头看起来像这样

public static Dictionary<string, string> GetAttributeValues<T>(Expression<Func<T, object>> myParam)

但是我如何找到PropertyA的名称呢?在返回正确的属性之前我需要做一些检查。 提前致谢..

干杯

PS:感谢driis帖子How to get names from expression property?我找到了解决办法

public static Dictionary<string, string> GetAttributeValues<T>(Expression<Func<T, object>> myParam)
{
    var item = myParam.Body as UnaryExpression;
    var operand = item.Operand as MemberExpression;
    Log.Debug(operand.Member.Name);
}

最佳答案

创建 ModelMetadata 的实例类:

var data = ModelMetadata.FromLambdaExpression<T, object>(myParam);

现在您可以获得有关模型上使用的属性的所有所需信息:

var propName = data.PropertyName;
var label = data.DisplayName;

关于c# - 如何从表达式属性中获取名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4554427/

相关文章:

c# - 在 ProcessStartInfo 中运行 `mklink`

c# - 模型中的 Mvvm 嵌套属性已更改

c# - 无效操作异常 : No method 'Where' on type 'System.Linq.Queryable' is compatible with the supplied arguments

.net - 无法从 C# .Net Core 应用程序连接并获取 Sharepoint 数据

c++ - 在类构造函数中调用命名 lambda 与调用实际私有(private)函数的优点

c# - Task.WaitAll 不等待子任务?

c# - 如何将工具提示数据绑定(bind)到用户控件的一部分?

c# - 不等待所有任务是否安全

java - Lambda 过滤器未按预期工作

c++ - 从 std::map 中删除 std::function lambda-wrapped 方法