- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个通用函数,它接受一个 MemberExpression 和一个对象,并返回成员表达式中定义的属性的值。
这是获取属性名称的代码示例。
public static TProperty GetPropertyName<TModel, TProperty>(Expression<Func<TModel, TProperty>> expression, TModel model)
{
if (expression.Body is MemberExpression)
{
return ((MemberExpression)expression.Body).Member.Name;
}
else
{
var op = ((UnaryExpression)expression.Body).Operand;
return ((MemberExpression)op).Member.Name;
}
}
但我想从模型中检索属性的值:
public static string GetPropertyValue<TModel, TProperty>(Expression<Func<TModel, TProperty>> expression, TModel model)
{
if (expression.Body is MemberExpression)
{
// how do I apply the expression.Body to get the value of the property from model??
}
else
{
var op = ((UnaryExpression)expression.Body).Operand;
return ((MemberExpression)op).Member.Name;
}
}
我调用这个函数的方式是:
GetPropertyValue<ObjectModel,bool>(m => m.somebool, m);
最佳答案
MemberExpression
是指 MemberInfo
,在属性表达式的情况下将是 PropertyInfo
:
static class MemberExpressionHelper
{
public static TProperty GetPropertyValue<TModel, TProperty>(TModel model, Expression<Func<TModel, TProperty>> expression)
{
// case with `UnaryExpression` is omitted for simplicity
var memberExpression = (MemberExpression)expression.Body;
var propertyInfo = (PropertyInfo)memberExpression.Member;
return (TProperty)propertyInfo.GetValue(model);
}
}
此外,交换参数更自然(首先是模型
,其次是表达式)。作为副作用,这允许编译器推断类型参数:
var bar = MemberExpressionHelper.GetPropertyValue(foo, _ => _.Bar);
关于c# - 将 MemberExpression 应用于对象以检索属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34304756/
我知道如何创建一个 MemberExpression 例如entity.Property // Expression: "entity" var parameter = Expression.Para
我正在尝试使用 Expression.MakeBinary 动态生成二进制表达式: public static BinaryExpression MakeBinary( ExpressionT
假设我有以下代码(我需要在更复杂的表达式中的任何位置包含此代码段)。 Type paraType = typeof(MyModel); var member = paraType.GetMember(
我有这个(在 C# MVC 项目中): public class Bindable { //(...) public IHtmlString FormControlTextField(
这里有人有编写自定义 Linq 提供程序的经验吗? 我想做的是判断作为业务对象属性的 MemberExpression 是否应该包含在 SQL 中,或者作为常量处理,因为它来自恰好是业务对象的局部变量
我们有以下实体: public class Employee { public int Serial { get; set; } public string FullName { ge
我正在尝试编写一个通用函数,它接受一个 MemberExpression 和一个对象,并返回成员表达式中定义的属性的值。 这是获取属性名称的代码示例。 public static TProperty
我正在为 MVC 创建一个表单生成器,我想通过以下方式模拟 Razor 对链式属性的处理: builder.TextBoxFor(x => x.User.Email); 这将以与 Razor 相同的方
想象一下以下类: class A { public string Test {get; set;} } class B : A { .. some other members .. }
我们正在努力使在我们系统的所有区域编写强类型代码变得容易,而不是设置 var sortColumn = "FirstName"我们想说sortOption = (p => p.FirstName) .
我需要帮助。我有两个类:实体和模型。他们的代码如下。 public class TestEntityForSerialize { public String FIO { get; set; }
我问类似的问题here,假设这种类型: public class Product { public string Name { get; set; } public string Title { g
给定这段代码: static void Main(string[] args) { Expression> test = i => i.Prop; var body = (UnaryE
所以,假设我在 C# 中有以下表达式: Expression> expr = () => foo.Bar; 如何提取对 foo 的引用? 最佳答案 I had the same problem, bu
描述 我有一个表达式指向我的类型的属性。但它不适用于所有属性类型。 "不是意思"是什么意思它导致不同的表达类型。我以为它会导致MemberExpression 但事实并非如此。 对于 int 和 Gu
根据我的 Select a model property using a lambda and not a string property name 的答案采取行动问题,想要向集合添加属性,如下所示:
我希望使用表达式树创建以下 Linq 表达式: var result2 = soldiers.OrderByDescending(soldier => soldier.Ranks.OrderBy(r=
我正在处理一个 linq 查询,并尝试按照 Mutilevel include in C# Linq 中的建议将实体包含到多个级别. 所以我写下这样的查询 query.Include(u => u.
以下成员表达式类型有时可以为 Nullable,我正在检查,但是我需要将其转换为不可为 null 的类型, MemberExpression member = Expression.Property(
下面的表达式将属性 NAME 与值 PETER 进行比较。 ParameterExpression pe = Expression.Parameter(typeof(T), "
我是一名优秀的程序员,十分优秀!